'-> Mattonite by Stefano Regattin
'i> 2 ottobre 1996 
'm> 3,8,12,13,14,19,25,27,31 ottobre 1996
'm> 9 novembre 1996
'm> 12 novembre 1997 
'm> 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 maggio 2000 
'm> 1,4,5,6,7,8,9,11,13,14,23,26,27,28 giugno 2000 
'm> 16,17,18,19,23,24 luglio 2000
'm> 5,12,13,14,15,30 agosto 2000 
'm> 1,10,11,26 settembre 2000
'm> 12,15,24,25,26,31 ottobre 2000 
'm> 2,16,17,21,23 novembre 2000
'm> 3 dicembre 2000
'm> 5,7,8,9,10,11,13,14,17,18,22,25,26,27,28 febbraio 2001 
'm> 1 marzo 2001 
'm> 15,22,23,26 aprile 2001
'm> 19,20,22,26,27,29 maggio 2001
'm> 1,2,3,4,5,9,10,12,25,28 giugno 2001
'm> 1,2,3,6,7,10,14,15,16,29 luglio 2001 
'----------------------------------------
Set Buffer 20
Degree 
OGGETTI$="MattoniteOggetti.Abk"
SUONI$="MattoniteSuoni.Abk"
PUNTEGGI$="TopHundredScores"
VERO=-1
FALSO=0
ALTEZZAFONT=8
BANCO=65535
IMMAGINIBOING=8
IMMAGINIGUANO=1
IMMAGINIPAPERO=4
IMMAGINIRUBAPALLINA=11
LARGHEZZAPANNELLO=48
MASSIMOBOINGINCAMPO=3
MASSIMOMATTONCINIDARIDISEGNARE=83
MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO=8
MASSIMOPALLINEINCAMPO=5
OGGETTORIGA=0
OGGETTOCENTRODELLABARRA=1
OGGETTOLATIDELLABARRA=OGGETTOCENTRODELLABARRA+1
OGGETTOMATTONCINODIPOTENZIAMENTO=OGGETTOLATIDELLABARRA+1
OGGETTOBOING=OGGETTOMATTONCINODIPOTENZIAMENTO+MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO
OGGETTOPAPERO=249
OGGETTOGUANO=250
OGGETTOPAPEROALIENO=251
OGGETTORUBAPALLINA=252
OGGETTOLASER=253
OGGETTORAGGIOLASER=254
OGGETTOPALLINA=OGGETTOPAPERO-MASSIMOPALLINEINCAMPO
PRIMAPARTITA=VERO
RITARDODELLENTRATAINCAMPODEIBOING=-1000
SEMITONO#=1.05946
SUONICARICATI=VERO
VOCE=1
Dim NOMEDELGIOCATORE$(99),LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(99)
Dim PUNTEGGIODELGIOCATORE$(99)
Dim DELTAXPALLINA#(MASSIMOPALLINEINCAMPO-1)
Dim DELTAYPALLINA#(MASSIMOPALLINEINCAMPO-1)
Dim VELOCITADELLAPALLINA#(MASSIMOPALLINEINCAMPO-1)
Dim XPALLINA#(MASSIMOPALLINEINCAMPO-1),YPALLINA#(MASSIMOPALLINEINCAMPO-1)
Dim BOING(MASSIMOBOINGINCAMPO-1),C0LORE(31),DURATADELLARIGA(2)
Dim DURATADELRIDISEGNODELMATTONCINO(MASSIMOMATTONCINIDARIDISEGNARE-1)
Dim IMMAGINEBOING(IMMAGINIBOING-1),IMMAGINEPAPERO(IMMAGINIPAPERO-1)
Dim IMMAGINEPAPEROALIENO(IMMAGINIPAPERO-1)
Dim IMMAGINERUBAPALLINA(IMMAGINIRUBAPALLINA-1),INGOMBRODELLABARRA(2)
Dim LAPALLINAERIMASTAINCOLLATAALLABARRA(MASSIMOPALLINEINCAMPO-1)
Dim LAPALLINAHACOLPITOLABARRA(MASSIMOPALLINEINCAMPO-1)
Dim LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(MASSIMOPALLINEINCAMPO-1)
Dim MATTONCINO(246),MATTONCINODARIDISEGNARE(MASSIMOMATTONCINIDARIDISEGNARE-1)
Dim MATTONCINODIPOTENZIAMENTO(MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1)
Dim PALLINA(MASSIMOPALLINEINCAMPO-1)
Dim VOCE(3),X0ZONA(246),XBOING(MASSIMOBOINGINCAMPO-1)
Dim XCOLLA(MASSIMOPALLINEINCAMPO-1)
Dim XMATTONCINODIPOTENZIAMENTO(MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1)
Dim Y0ZONA(246),YBOING(MASSIMOBOINGINCAMPO-1),YCOLLA(MASSIMOPALLINEINCAMPO-1)
Dim YMATTONCINODIPOTENZIAMENTO(MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1)
Global VERO,FALSO
Global CENTOGIOCATORI$,OGGETTI$,PERCORSO$,PERCORSODEILIVELLI$
Global PERCORSODELLAGRAFICA$,PERCORSODELLAMUSICA$,PUNTEGGI$,SUONI$
Global SEMITONO#
Global ALTEZZAFONT,BANCO,_BARRABLOCCATA,BOINGINCAMPO,BONUS,C0LLA
Global C0LORIDELLOSCHERMOMENOUNO,DISTANZADELMATTONCINOPIUVICINOALPAPERO
Global DURATADELLARIGA,GRADIPAPEROALIENO,GUANOINCAMPO,GUANOMOLLATO
Global IMMAGINEGUANO,IMMAGINELASER,IMMAGINEPALLINA,IMMAGINEPAPERO
Global IMMAGINEPAPEROALIENO,IMMAGINERAGGIOLASER,IMMAGINERUBAPALLINA
Global IMMAGINIBOING,IMMAGINIGUANO,IMMAGINIPAPERO,IMMAGINERIGADUE
Global IMMAGINERIGATRE,IMMAGINERIGAUNO,IMMAGINIRUBAPALLINA,LARGHEZZAPANNELLO
Global LASER,LIVELLO,LUNGHEZZADELLABARRA,LUNGHEZZADELLABARRACAMBIATA
Global MASSIMOBOINGINCAMPO,MASSIMOMATTONCINIDARIDISEGNARE
Global MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO,MASSIMOPALLINEINCAMPO
Global MATTONCINI,MATTONCINIDIPOTENZIAMENTO,MATTONCINIRIMASTI
Global MATTONCINODATROVAREPERILPAPERO,MATTONCINOPERILPAPERO,OGGETTOBOING
Global OGGETTOCENTRODELLABARRA,OGGETTOGUANO,OGGETTOLASER,OGGETTOLATIDELLABARRA
Global OGGETTOMATTONCINODIPOTENZIAMENTO,OGGETTOPALLINA,OGGETTOPAPERO
Global OGGETTOPAPEROALIENO,OGGETTORAGGIOLASER,OGGETTORIGA,OGGETTORUBAPALLINA
Global PALLINAPRESADALRUBAPALLINA,PALLINASCELTADALRUBAPALLINA,PALLINE
Global PALLINEINCAMPO,_PAPEROALIENO,_PAPEROALIENOINCAMPO,_PAPEROINCAMPO
Global POSIZIONE,PUNTEGGIO,PUNTEGGIOMASSIMO,RAGGIOLASERRIFLESSO
Global RAGGIOLASERSPARATO,RIGA,RIMBALZODELLEPALLINESUIMATTONCINI,RITARDOBOING
Global RITARDOPAPERO,RITARDODELLARIPETIZIONEDELSUONODELLAPALLINARUBATA
Global RITARDODELLENTRATAINCAMPODEIBOING
Global RITARDODELLENTRATAINCAMPODELPAPEROALIENO
Global RITARDODELLENTRATAINCAMPODELRUBAPALLINA,RUBAPALLINACOLPITO
Global SUONICARICATI,TASTO,TASTOGRIGIO,T0GLILARIGA,VOCE,XBARRA,XFINALERIGA
Global XGUANO,XLASER,XPANNELLO,XPAPERO,XPAPEROALIENO,XRIGA,XRUBAPALLINA,YBARRA
Global YGUANO,YLASER,YPAPERO,YPAPEROALIENO,YRUBAPALLINA
Global NOMEDELGIOCATORE$(),LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$()
Global PUNTEGGIODELGIOCATORE$()
Global DELTAXPALLINA#(),DELTAYPALLINA#(),VELOCITADELLAPALLINA#(),XPALLINA#()
Global YPALLINA#()
Global BOING(),C0LORE(),DURATADELLARIGA(),DURATADELRIDISEGNODELMATTONCINO()
Global IMMAGINEBOING(),IMMAGINEPAPERO(),IMMAGINEPAPEROALIENO()
Global IMMAGINERUBAPALLINA(),INGOMBRODELLABARRA()
Global LAPALLINAERIMASTAINCOLLATAALLABARRA(),LAPALLINAHACOLPITOLABARRA()
Global LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(),MATTONCINO()
Global MATTONCINODARIDISEGNARE(),MATTONCINODIPOTENZIAMENTO(),PALLINA(),VOCE()
Global X0ZONA(),XBOING(),XCOLLA(),XMATTONCINODIPOTENZIAMENTO(),YBOING()
Global YCOLLA(),YMATTONCINODIPOTENZIAMENTO(),Y0ZONA()
Proc INDIVIDUALAPOSIZIONEDELPROGRAMMA
Proc IMPOSTAIPERCORSIDEIFILE
Proc IMPOSTALOSCHERMO
Proc CARICAGLIOGGETTI
Proc IMPOSTAGLIOGGETTI
Proc IMPOSTAICOLORI
Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
Proc TROVAILFONTDATA70
Proc DISSOLVENZADEICOLORI[$FFF,1,1]
Hide 
Proc IMPOSTALARCOBALENO
If SUONICARICATI=VERO Then Proc CARICAISUONI
Proc CARICAILLIVELLO
Proc DABANCOAVARIABILI
Proc METTIILPANNELLO
Proc CREALEIMMAGINIPERLERIGHE
Proc IMPOSTALEZONEDEIMATTONCINI
Proc METTIECONTAIMATTONCINI
Proc IMPOSTALINGOMBRODELLABARRA
Proc CARICAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
Proc IMPOSTALADURATADELLERIGHE
Proc DISSOLVENZADEICOLORI[$FFF,1,2]
Proc IMPOSTAILAMPEGGI
Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
Repeat 
 Proc MOSTRAICREDITI
 Proc MOSTRAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
 TESTOINTRODUTTIVO$="Press left mouse button to play."+Chr$(10)
 TESTOINTRODUTTIVO$=TESTOINTRODUTTIVO$+"Press right mouse button to exit."
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOINTRODUTTIVO$,20,21,1,500]
 If TASTO=-1
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
  C0LLA=FALSO
  DISTANZADELMATTONCINOPIUVICINOALPAPERO=1000
  DURATADELLARIGA=-1
  INIZIODELLIVELLO=VERO
  LASER=0
  LIVELLO=0
  LUNGHEZZADELLABARRA=1
  LUNGHEZZADELLABARRACAMBIATA=LUNGHEZZADELLABARRA
  PALLINASCELTATADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
  PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
  PALLINE=5
  PALLINEINCAMPO=1
  _PAPEROINCAMPO=FALSO
  PUNTEGGIO=0
  RIGA=0
  RIMBALZODELLEPALLINESUIMATTONCINI=VERO
  XBARRA=X Screen(X Mouse)
  YBARRA=247
  If PRIMAPARTITA=FALSO or LIVELLO>0
   Proc CANCELLAIMATTONCINI
   Proc CARICAILLIVELLO
   Proc DABANCOAVARIABILI
   Proc METTIECONTAIMATTONCINI
  Else 
   PRIMAPARTITA=FALSO
  End If 
  Repeat 
   Proc IMPOSTAILRIMBALZODELLEPALLINE
   Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELPAPEROALIENO
   Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELRUBAPALLINA
   Proc AGGIORNAILPANNELLO
   If INIZIODELLIVELLO=VERO
    TESTOINIZIOGIOCO$="Get ready for level"+Str$(LIVELLO)+"!"+Chr$(10)
    TESTOINIZIOGIOCO$=TESTOINIZIOGIOCO$+"Press a (mouse) key to begin..."
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOINIZIOGIOCO$,22,20,1,500]
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc IMPOSTAIBOING
    If SUONICARICATI=VERO
     Sam Play VOCE,1 : Proc VOCESEGUENTE
    Else 
     Bell 20
    End If 
    INIZIODELLIVELLO=FALSO
   End If 
   For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
    If PALLINA<PALLINEINCAMPO
     PALLINA(PALLINA)=VERO
     XPALLINA#(PALLINA)=XBARRA+PALLINA*7-14
     YPALLINA#(PALLINA)=YBARRA-3
    Else 
     PALLINA(PALLINA)=FALSO
     Proc CANCELLALAPALLINA[PALLINA]
    End If 
   Next PALLINA
   Repeat 
    TASTOCLICCATODELTOPO=Mouse Click
    XBARRA=X Screen(X Mouse)
    Proc MOSTRALABARRA
    Proc CAMBIALALUNGHEZZADELLABARRA
    Proc LIMITAIMOVIMENTIDELLABARRA
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=VERO
      XPALLINA#(PALLINA)=XBARRA+PALLINA*7-14
      YPALLINA#(PALLINA)=YBARRA-3
      Bob OGGETTOPALLINA+PALLINA,Int(XPALLINA#(PALLINA)),Int(YPALLINA#(PALLINA)),IMMAGINEPALLINA
     End If 
    Next PALLINA
    Proc MOSTRAILLASER
    If T0GLILARIGA>0
     If XRIGA>0
      Dec XRIGA
     End If 
     Proc MOSTRALARIGA[T0GLILARIGA]
    Else 
     If RIGA>0
      If XRIGA<XFINALERIGA
       Inc XRIGA
       Proc MOSTRALARIGA[RIGA]
      End If 
     End If 
    End If 
    Proc MATTONCINIDIPOTENZIAMENTO[0,0]
    Proc BOINGINCAMPO
    If _PAPEROINCAMPO=VERO
     Proc _PAPEROINCAMPO
    End If 
    If RITARDODELLENTRATAINCAMPODELPAPEROALIENO=0
     Proc _PAPEROALIENOINCAMPO
     Proc MOLLAILGUANO
    Else 
     Dec RITARDODELLENTRATAINCAMPODELPAPEROALIENO
    End If 
    If RITARDODELLENTRATAINCAMPODELRUBAPALLINA=1
     ENTRATAINCAMPODELRUBAPALLINA=Rnd(2)>1
    End If 
    If RITARDODELLENTRATAINCAMPODELRUBAPALLINA=0
     If ENTRATAINCAMPODELRUBAPALLINA=VERO
      Proc RUBAPALLINAINCAMPO
     End If 
    Else 
     Dec RITARDODELLENTRATAINCAMPODELRUBAPALLINA
    End If 
    Bob Update 
    TASTOPREMUTO$=Lower$(Inkey$)
    TASTOGRIGIO=Key Shift
    TASTOSCANSITO=Scancode
    Exit If TASTOPREMUTO$=Chr$(27)
    If TASTOPREMUTO$="p"
     Proc METTIILGIOCOINPAUSA
    End If 
    If TASTOGRIGIO=4
     If TASTOSCANSITO=80 : Rem F1 key 
      Add LUNGHEZZADELLABARRACAMBIATA,1,0 To 2
     Else If TASTOSCANSITO=81 : Rem F2 key 
      Add PALLINEINCAMPO,1,1 To 5
      For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
       If PALLINA<PALLINEINCAMPO
        PALLINA(PALLINA)=VERO
       Else 
        PALLINA(PALLINA)=FALSO
        Proc CANCELLALAPALLINA[PALLINA]
       End If 
      Next PALLINA
     Else If TASTOSCANSITO=82 : Rem F3 key 
      If LASER=-1
       LASER=1
      Else If LASER=1
       LASER=2
      Else If LASER=2
       LASER=3
      Else If LASER=3
       LASER=0
      End If 
     Else If TASTOSCANSITO=83 : Rem F4 key 
      If RIGA>0 and T0GLILARIGA=0
       T0GLILARIGA=RIGA
      End If 
      Add RIGA,1,0 To 3
     Else If TASTOPREMUTO$=" "
      Proc MATTONCINIDIPOTENZIAMENTO[-Rnd(18)-1,0]
     End If 
    End If 
   Until TASTOCLICCATODELTOPO>0
   For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
    If PALLINA<PALLINEINCAMPO
     PALLINA(PALLINA)=VERO
     VELOCITADELLAPALLINA#(PALLINA)=1
     D1REZIONEXPALLINA=Rnd(1)
     If D1REZIONEXPALLINA=1
      DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)
     Else 
      DELTAXPALLINA#(PALLINA)=-VELOCITADELLAPALLINA#(PALLINA)
     End If 
     DELTAYPALLINA#(PALLINA)=-VELOCITADELLAPALLINA#(PALLINA)
    Else 
     PALLINA(PALLINA)=FALSO
     Proc CANCELLALAPALLINA[PALLINA]
    End If 
   Next PALLINA
   Repeat 
    TASTOCLICCATODELTOPO=Mouse Click
    If TASTOCLICCATODELTOPO=1
     For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
      LAPALLINAERIMASTAINCOLLATAALLABARRA(PALLINA)=FALSO
     Next PALLINA
    Else If TASTOCLICCATODELTOPO=2
     Proc HAISPARATOILRAGGIOLASER
    End If 
    If _BARRABLOCCATA>0
     If _BARRABLOCCATA=1
      X Mouse=X Hard(XBARRA)
     End If 
     Dec _BARRABLOCCATA
    Else 
     XBARRA=X Screen(X Mouse)
    End If 
    Proc MOSTRALABARRA
    Proc CAMBIALALUNGHEZZADELLABARRA
    Proc LIMITAIMOVIMENTIDELLABARRA
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=VERO
      If LAPALLINAERIMASTAINCOLLATAALLABARRA(PALLINA)=VERO
       XPALLINA#(PALLINA)=XBARRA-XCOLLA(PALLINA)
       YPALLINA#(PALLINA)=YBARRA-YCOLLA(PALLINA)
      Else 
       XPALLINA#(PALLINA)=XPALLINA#(PALLINA)+DELTAXPALLINA#(PALLINA)
       YPALLINA#(PALLINA)=YPALLINA#(PALLINA)+DELTAYPALLINA#(PALLINA)
       If TILTPALLINA=VERO
        XPALLINA#(PALLINA)=XPALLINA#(PALLINA)+XTILTPALLINA
        YPALLINA#(PALLINA)=YPALLINA#(PALLINA)+YTILTPALLINA
       End If 
       If XPALLINA#(PALLINA)>XPANNELLO-1-3
        XPALLINA#(PALLINA)=XPANNELLO-1-3
        DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
        If SUONICARICATI=VERO
         Sam Play VOCE,2,8363*2 : Proc VOCESEGUENTE
        Else 
         Boom 
        End If 
       Else If XPALLINA#(PALLINA)<3
        XPALLINA#(PALLINA)=3
        DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
        If SUONICARICATI=VERO
         Sam Play VOCE,2,8363*2 : Proc VOCESEGUENTE
        Else 
         Boom 
        End If 
       Else If YPALLINA#(PALLINA)<3
        YPALLINA#(PALLINA)=3
        DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
        If SUONICARICATI=VERO
         Sam Play VOCE,2,8363*2 : Proc VOCESEGUENTE
        Else 
         Boom 
        End If 
       End If 
       If TILTPALLINA=VERO
        Add XTILTPALLINA,-Sgn(XTILTPALLINA)
        If XTILTPALLINA>0
         XTILTPALLINA=Max(XTILTPALLINA,0)
        Else If XTILTPALLINA<0
         XTILTPALLINA=Min(XTILTPALLINA,0)
        End If 
        Add YTILTPALLINA,-Sgn(YTILTPALLINA)
        If YTILTPALLINA>0
         YTILTPALLINA=Max(YTILTPALLINA,0)
        Else If YTILTPALLINA<0
         YTILTPALLINA=Min(YTILTPALLINA,0)
        End If 
        Screen Display 0,128+XTILTPALLINA,44+YTILTPALLINA,320,256
        If XTILTPALLINA=0 and YTILTPALLINA=0
         TILTPALLINA=FALSO
        End If 
       Else 
        If TASTOPREMUTO$=" "
         XTILTPALLINA=Rnd(32)-16 : YTILTPALLINA=Rnd(32)-16 : TILTPALLINA=VERO
        End If 
       End If 
      End If 
      Bob OGGETTOPALLINA+PALLINA,Int(XPALLINA#(PALLINA)),Int(YPALLINA#(PALLINA)),IMMAGINEPALLINA
      If LAPALLINAERIMASTAINCOLLATAALLABARRA(PALLINA)=FALSO
       Proc MATTONCINOCOLPITODALLAPALLINA[PALLINA]
       Proc LAPALLINAHACOLPITOLABARRA[PALLINA]
       Proc LAPALLINAHACOLPITOLARIGA[PALLINA]
       Proc LAPALLINAEUSCITADALCAMPODIGIOCO[PALLINA]
      End If 
     End If 
    Next PALLINA
    Exit If TASTOPREMUTO$=Chr$(27)
    TASTOPREMUTO$=Lower$(Inkey$)
    Exit If TASTOPREMUTO$=Chr$(27)
    If TASTOPREMUTO$="p"
     Proc METTIILGIOCOINPAUSA
    End If 
    Proc MOSTRAILLASER
    Proc MOSTRAILRAGGIOLASER
    TASTOGRIGIO=Key Shift
    SHIFTSINISTRO=Btst(0,TASTOGRIGIO)
    SHIFTDESTRO=Btst(1,TASTOGRIGIO)
    TASTOMAIUSCOLE=Btst(2,TASTOGRIGIO)
    TASTISHIFTPREMUTI=SHIFTSINISTRO or SHIFTDESTRO or TASTOMAIUSCOLE
    If TASTISHIFTPREMUTI=FALSO
     Proc MATTONCINOCOLPITODALRAGGIOLASER
    End If 
    Proc LABARRAESTATACOLPITADALRAGGIOLASERRIFLESSO
    If T0GLILARIGA>0
     If XRIGA>0
      Dec XRIGA : Proc MOSTRALARIGA[T0GLILARIGA]
     Else 
      Proc T0GLILARIGA : DURATADELLARIGA=-1
     End If 
    Else 
     If RIGA>0
      If XRIGA<XFINALERIGA
       Inc XRIGA : Proc MOSTRALARIGA[RIGA]
      Else 
       If DURATADELLARIGA=-1
        DURATADELLARIGA=DURATADELLARIGA(RIGA-1)
       Else If DURATADELLARIGA=0
        T0GLILARIGA=RIGA : RIGA=0
       Else 
        Dec DURATADELLARIGA
       End If 
      End If 
     End If 
    End If 
    Proc MATTONCINIDIPOTENZIAMENTO[0,0]
    Proc BOINGINCAMPO
    If _PAPEROINCAMPO=VERO
     Proc _PAPEROINCAMPO
    End If 
    If RITARDODELLENTRATAINCAMPODELPAPEROALIENO=0
     Proc _PAPEROALIENOINCAMPO
     Proc MOLLAILGUANO
    Else 
     Dec RITARDODELLENTRATAINCAMPODELPAPEROALIENO
    End If 
    If RITARDODELLENTRATAINCAMPODELRUBAPALLINA=1
     ENTRATAINCAMPODELRUBAPALLINA=Rnd(2)>1
    End If 
    If RITARDODELLENTRATAINCAMPODELRUBAPALLINA=0
     If ENTRATAINCAMPODELRUBAPALLINA=VERO
      Proc RUBAPALLINAINCAMPO
     End If 
    Else 
     Dec RITARDODELLENTRATAINCAMPODELRUBAPALLINA
    End If 
    Bob Update 
    For MATTONCINODARIDISEGNARE=0 To MASSIMOMATTONCINIDARIDISEGNARE-1
     If DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)>0
      MATTONCINO=MATTONCINODARIDISEGNARE(MATTONCINODARIDISEGNARE)
      If MATTONCINO>0
       X0MATTONCINO=X0ZONA(MATTONCINO-1)
       Y0MATTONCINO=Y0ZONA(MATTONCINO-1)
       TIPODIMATTONCINO=MATTONCINO(MATTONCINO-1)
       If TIPODIMATTONCINO=0
        Ink 0 : Bar X0MATTONCINO,Y0MATTONCINO To X0MATTONCINO+19,Y0MATTONCINO+9
       Else 
        Paste Bob X0MATTONCINO,Y0MATTONCINO,82+TIPODIMATTONCINO
       End If 
      End If 
      Dec DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)
     End If 
    Next MATTONCINODARIDISEGNARE
    If BONUS>0
     If RITARDODELDECREMENTODELBONUS=9
      RITARDODELDECREMENTODELBONUS=0 : Dec BONUS : Proc MOSTRAILBONUS[FALSO]
     Else 
      Inc RITARDODELDECREMENTODELBONUS
     End If 
    End If 
    Exit If MATTONCINI=0
   Until PALLINEINCAMPO=0
   Proc CANCELLALABARRA
   Proc CANCELLALEPALLINE
   Proc T0GLIILLASER
   Proc CANCELLAILRAGGIOLASER
   Proc CANCELLAIMATTONCINIDIPOTENZIAMENTO
   Proc CANCELLAILRUBAPALLINA
   Proc CANCELLAILPAPERO : _PAPEROINCAMPO=FALSO
   Proc CANCELLAILPAPEROALIENO
   Proc CANCELLAILGUANO
   Proc CANCELLAIBOING
   Proc CANCELLALARIGA
   Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
   Exit If TASTOPREMUTO$=Chr$(27)
   If MATTONCINI=0
    Proc AGGIUNGIALPUNTEGGIOILBONUS
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc AGGIORNAILPANNELLO
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
    Proc AGGIUNGIALPUNTEGGIOILBONUSPERIMATTONCINIRIMASTI
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc AGGIORNAILPANNELLO
    Inc LIVELLO
    INIZIODELLIVELLO=VERO
   End If 
   If PALLINEINCAMPO>0
    Proc CANCELLAIMATTONCINI
    Proc CARICAILLIVELLO
    Exit If LIVELLO<0
    Proc DABANCOAVARIABILI
    Proc METTIECONTAIMATTONCINI
   Else 
    Proc CANCELLALARIGA
    C0LLA=FALSO
    RIMBALZODELLEPALLINESUIMATTONCINI=VERO
    If LASER>0
     Dec LASER
    End If 
    Dec PALLINE : PALLINEINCAMPO=1
    If SUONICARICATI=VERO
     Sam Play VOCE,5 : Proc VOCESEGUENTE
    Else 
     Boom 
    End If 
   End If 
  Until PALLINE=0
  If TASTOPREMUTO$<>Chr$(27)
   Proc AGGIUNGIALPUNTEGGIOILBONUSPERLEPALLINERIMASTEAFINEGIOCO
   Proc FAIINSERIREALGIOCATOREILSUOPUNTEGGIO
   Proc SALVAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
   Proc CARICAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
  End If 
  GREETING$="The game is finished."+Chr$(10)
  GREETING$=GREETING$+"I hope you have enjoyed."+Chr$(10)
  GREETING$=GREETING$+"Bye bye!"
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[GREETING$,20,22,1,1000]
 End If 
Until TASTO=-2
Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
Flash Off : Proc DISSOLVENZADEICOLORI[0,1,1]
Proc T0GLIIMATTONCINI
Proc T0GLIILPANNELLO
Proc T0GLILARCOBALENO
Show : Rainbow Del 0 : Screen Close 0 : Erase All : End 
Procedure AGGIORNAILPANNELLO
 ' Update the panel 
 Proc MOSTRAILPUNTEGGIO[VERO]
 Proc MOSTRAILPUNTEGGIOMASSIMO[VERO]
 Proc MOSTRALEPALLINERIMASTE
 Proc MOSTRAILLIVELLO
 Proc MOSTRAILBONUS[VERO]
End Proc
Procedure AGGIUNGIALPUNTEGGIOILBONUS
 ' Add the bonus to the score 
 If BONUS>0
  BONUS$="I am going to add the bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to your game points."+Chr$(10)
  BONUS$=BONUS$+"Wait for a moment, please..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,22,20,1,-1]
  Repeat 
   TASTOPREMUTO$=Lower$(Inkey$)
   If TASTOPREMUTO$="p"
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc METTIILGIOCOINPAUSA
   End If 
   Dec BONUS : Proc MOSTRAILBONUS[FALSO]
   Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
  Until BONUS=0
 Else 
  TASTOPREMUTO$=Lower$(Inkey$)
  If TASTOPREMUTO$="p"
   Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
   Proc METTIILGIOCOINPAUSA
  End If 
  BONUS$="There are no bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to add to your game points."+Chr$(10)
  BONUS$=BONUS$+"I am sorry..."+Chr$(10)+"...I wish a better luck for the next level."+Chr$(10)
  BONUS$=BONUS$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,21,20,1,1000]
 End If 
End Proc
Procedure AGGIUNGIALPUNTEGGIOILBONUSPERIMATTONCINIRIMASTI
 ' Add 2 points to the score for every brick left 
 If MATTONCINIRIMASTI>0
  BONUS$="I am going to add the bricks left bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to your game points,"+Chr$(10)
  BONUS$=BONUS$+"adding two points for each brick left."+Chr$(10)
  BONUS$=BONUS$+"There are"+Str$(MATTONCINIRIMASTI)+" bricks left..."+Chr$(10)
  BONUS$=BONUS$+"...wait for a moment, please..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,22,20,1,-1]
  Repeat 
   TASTOPREMUTO$=Lower$(Inkey$)
   If TASTOPREMUTO$="p"
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc METTIILGIOCOINPAUSA
   End If 
   Dec MATTONCINIRIMASTI
   Add PUNTEGGIO,2 : Proc MOSTRAILPUNTEGGIO[VERO]
  Until MATTONCINIRIMASTI=0
 Else 
  TASTOPREMUTO$=Lower$(Inkey$)
  If TASTOPREMUTO$="p"
   Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
   Proc METTIILGIOCOINPAUSA
  End If 
  BONUS$="There are no bricks left bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to add to your game points."+Chr$(10)
  BONUS$=BONUS$+"I am sorry..."+Chr$(10)+"...I wish a better luck for the next level."+Chr$(10)
  BONUS$=BONUS$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,21,20,1,1000]
 End If 
End Proc
Procedure AGGIUNGIALPUNTEGGIOILBONUSPERLEPALLINERIMASTEAFINEGIOCO
 ' Add 500 points to the score for every ball left at the end of the game 
 If PALLINE>0
  BONUS$="I am going to add the ball left bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to your game points,"+Chr$(10)
  BONUS$=BONUS$+"adding 500 points for each ball left."+Chr$(10)
  BONUS$=BONUS$+"There are"+Str$(PALLINE)+" ball(s) left..."+Chr$(10)
  BONUS$=BONUS$+"...wait for a moment, please..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,22,20,1,-1]
  Repeat 
   TASTOPREMUTO$=Lower$(Inkey$)
   If TASTOPREMUTO$="p"
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc METTIILGIOCOINPAUSA
   End If 
   Dec PALLINE : Proc MOSTRALEPALLINERIMASTE
   Add PUNTEGGIO,500 : Proc MOSTRAILPUNTEGGIO[VERO]
   Sam Play VOCE,2 : Proc VOCESEGUENTE
   _ASPETTA[50]
  Until PALLINE=0
 Else 
  BONUS$="There are no balls left bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to add to your game points."+Chr$(10)
  BONUS$=BONUS$+"I am sorry..."+Chr$(10)+"...I wish a better luck for the next game."+Chr$(10)
  BONUS$=BONUS$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,21,20,1,1000]
 End If 
End Proc
Procedure _ASPETTA[TEMP0DAASPETTARE]
 ' Wait for a (mouse or grey) key pressed:
 ' if time to wait (TEMP0DAASPETTARE) is less than zero exit immediately; 
 ' if time to wait is equal to zero wait forever; 
 ' if time to wait is grater than zero wait the specified time. 
 TASTO=0
 Timer=0
 Repeat 
  TASTOPREMUTO$=Inkey$
  TASTOGRIGIO=Key Shift
  TASTOPREMUTODELTOPO=Mouse Key
  If TASTOGRIGIO>0 and TASTOGRIGIO<>Key Shift
   Add TASTO,TASTOGRIGIO*256 : Exit 
  End If 
  If TASTOPREMUTODELTOPO>0 Then TASTO=-TASTOPREMUTODELTOPO : Exit 
  If TASTOPREMUTO$<>"" Then TASTO=Asc(TASTOPREMUTO$) : Exit 
  If TEMP0DAASPETTARE>0 Then TEMP0TRASCORSO=Timer
  If TEMP0DAASPETTARE<0 Then Pop Proc
 Until TEMP0TRASCORSO>TEMP0DAASPETTARE
End Proc
Procedure BOINGINCAMPO
 ' Manage the boings
 For BOING=0 To MASSIMOBOINGINCAMPO-1
  If BOING(BOING)>0
   If RITARDOBOING=0
    Bob OGGETTOBOING+BOING,XBOING(BOING),YBOING(BOING),IMMAGINEBOING(BOING(BOING)-1)
    Add XBOING(BOING),Rnd(4)-2
    Proc LIMITI[XBOING(BOING),0,XFINALERIGA] : XBOING(BOING)=Param
    Inc YBOING(BOING)
    Add BOING(BOING),1,1 To 8
   End If 
   Proc ILBOINGESTATOCOLPITO[BOING]
   Proc ILBOINGEUSCITODALCAMPODIGIOCO[BOING]
  Else If BOING(BOING)=0
   XBOING(BOING)=Rnd(XFINALERIGA) : YBOING(BOING)=-9 : BOING(BOING)=Rnd(7)+1
   If SUONICARICATI=VERO
    Sam Play VOCE,10 : Proc VOCESEGUENTE
   Else 
    Bell 60
   End If 
  Else If BOING(BOING)<0
   If BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
    Proc CANCELLAILBOING[BOING] : Inc BOING(BOING)
   Else 
    Inc BOING(BOING)
   End If 
  End If 
 Next BOING
 Add RITARDOBOING,1,0 To 3
End Proc
Procedure CAMBIALALUNGHEZZADELLABARRA
 ' Change the bar size
 If LUNGHEZZADELLABARRACAMBIATA<>LUNGHEZZADELLABARRA
  If LUNGHEZZADELLABARRA=0
   If LUNGHEZZADELLABARRACAMBIATA=1
    Gosub LUNGHEZZADAZEROAUNO
   End If 
   If LUNGHEZZADELLABARRACAMBIATA=2
    Gosub LUNGHEZZADAZEROAUNO
    Gosub LUNGHEZZADAUNOADUE
   End If 
  Else If LUNGHEZZADELLABARRA=1
   If LUNGHEZZADELLABARRACAMBIATA=0
    Gosub LUNGHEZZADAUNOAZERO
   End If 
   If LUNGHEZZADELLABARRACAMBIATA=2
    Gosub LUNGHEZZADAUNOADUE
   End If 
  Else If LUNGHEZZADELLABARRA=2
   If LUNGHEZZADELLABARRACAMBIATA=0
    Gosub LUNGHEZZADADUEAUNO
    Gosub LUNGHEZZADAUNOAZERO
   End If 
   If LUNGHEZZADELLABARRACAMBIATA=1
    Gosub LUNGHEZZADADUEAUNO
   End If 
  End If 
 End If 
 LUNGHEZZADELLABARRA=LUNGHEZZADELLABARRACAMBIATA
 Pop Proc
 LUNGHEZZADAZEROAUNO:
 ' From small to medium bar 
 For OGGETTO=45 To 41 Step -1
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,OGGETTO+5
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update 
 Next OGGETTO
 Return 
 LUNGHEZZADAUNOADUE:
 ' From medium to large bar 
 For OGGETTO=13 To 26
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,OGGETTO+14
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update 
 Next OGGETTO
 Return 
 LUNGHEZZADADUEAUNO:
 ' From large to medium bar 
 For OGGETTO=26 To 13 Step -1
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,OGGETTO+14
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update 
 Next OGGETTO
 Return 
 LUNGHEZZADAUNOAZERO:
 ' From medium to small bar 
 For OGGETTO=41 To 45
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,OGGETTO+5
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update 
 Next OGGETTO
 Return 
End Proc
Procedure CANCELLAIBOING
 ' Turn off all the boings
 For BOING=0 To MASSIMOBOINGINCAMPO-1
  Bob Off OGGETTOBOING+BOING
 Next BOING
 Bob Update 
End Proc
Procedure CANCELLAILBOING[BOING]
 ' Turn off the specified boing 
 Bob Off OGGETTOBOING+BOING
 Bob Update 
End Proc
Procedure CANCELLAILGUANO
 Bob Off OGGETTOGUANO
 Bob Update 
 GUANOMOLLATO=FALSO
 GUANOINCAMPO=FALSO
End Proc
Procedure CANCELLAILMATTONCINODIPOTENZIAMENTO[MATTONCINODIPOTENZIAMENTO]
 ' Turn off the specified bonus brick 
 Bob Off OGGETTOMATTONCINODIPOTENZIAMENTO+MATTONCINODIPOTENZIAMENTO
 Bob Update 
 MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=0
End Proc
Procedure CANCELLAILPAPERO
 ' Turn off the duck
 Bob Off OGGETTOPAPERO
 Bob Update 
End Proc
Procedure CANCELLAILPAPEROALIENO
 ' Turn off the alien duck
 Bob Off OGGETTOPAPEROALIENO
 Bob Update 
 _PAPEROALIENO=0
 _PAPEROALIENOINCAMPO=FALSO
End Proc
Procedure CANCELLAILRAGGIOLASER
 ' Turn off the laser ray 
 Bob Off OGGETTORAGGIOLASER
 Bob Update 
 RAGGIOLASERSPARATO=FALSO
End Proc
Procedure CANCELLAILRUBAPALLINA
 ' Turn off the ballthief 
 Bob Off OGGETTORUBAPALLINA
 Bob Update 
 Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELRUBAPALLINA
 PALLINASCELTADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
End Proc
Procedure CANCELLAIMATTONCINI
 ' Clear the bricks area  
 Cls 0,0,0 To XPANNELLO,Screen Height
End Proc
Procedure CANCELLAIMATTONCINIDIPOTENZIAMENTO
 ' Turn off all the bonus bricks
 For MATTONCINODIPOTENZIAMENTO=0 To MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1
  If MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)>0
   Bob Off OGGETTOMATTONCINODIPOTENZIAMENTO+MATTONCINODIPOTENZIAMENTO
  End If 
  MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=0
 Next MATTONCINODIPOTENZIAMENTO
 Bob Update 
End Proc
Procedure CANCELLALABARRA
 ' Turn off the bar 
 Bob Off OGGETTOCENTRODELLABARRA
 Bob Off OGGETTOLATIDELLABARRA
 Bob Update 
End Proc
Procedure CANCELLALAPALLINA[PALLINA]
 ' Turn off the specified ball  
 Bob Off OGGETTOPALLINA+PALLINA
 Bob Update 
End Proc
Procedure CANCELLALARIGA
 ' Turn off the row 
 If RIGA>0
  T0GLILARIGA=RIGA : RIGA=0
  For XRIGA=XRIGA To 0 Step -1
   Proc MOSTRALARIGA[T0GLILARIGA] : Wait Vbl 
  Next XRIGA
  DURATADELLARIGA=-1
 End If 
End Proc
Procedure CANCELLALEPALLINE
 ' Turn off all the balls 
 For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
  Bob Off OGGETTOPALLINA+PALLINA
 Next PALLINA
 Bob Update 
End Proc
Procedure CARICAGLIOGGETTI
 ' Load the objects 
 Load PERCORSODELLAGRAFICA$+OGGETTI$
End Proc
Procedure CARICAILLIVELLO
 ' Load the level 
 LIVELLO$="Livello"+Str$(LIVELLO)-" "
 FILE$=PERCORSODEILIVELLI$+LIVELLO$
 If Exist(FILE$)
  Open In 1,FILE$
  MARCATORE$=Input$(1,9)
  LUNGHEZZABANCO=Lof(1)
  Close 1
  If MARCATORE$="Mattonite"
   Reserve As Work BANCO,LUNGHEZZABANCO
   Bload FILE$,Start(BANCO)
  End If 
 Else 
  LIVELLO= Not LIVELLO
 End If 
End Proc
Procedure CARICAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
 ' Load the top hundred scores
 If Exist(PUNTEGGI$)
  CENTOGIOCATORI$=""
  Open In 1,PUNTEGGI$
  For POSIZIONE=0 To 99
   Exit If Eof(1)
   Input #1,NOMEDELGIOCATORE$(POSIZIONE)
   CENTOGIOCATORI$=CENTOGIOCATORI$+"<"+Str$(POSIZIONE+1)-" "+"> "
   CENTOGIOCATORI$=CENTOGIOCATORI$+NOMEDELGIOCATORE$(POSIZIONE)+Chr$(10)
   Input #1,PUNTEGGIODELGIOCATORE$(POSIZIONE)
   CENTOGIOCATORI$=CENTOGIOCATORI$+PUNTEGGIODELGIOCATORE$(POSIZIONE)
   CENTOGIOCATORI$=CENTOGIOCATORI$+" points up to level "
   Input #1,LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONE)
   CENTOGIOCATORI$=CENTOGIOCATORI$+LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONE)
   If Not Eof(1)
    CENTOGIOCATORI$=CENTOGIOCATORI$+Chr$(10)
   End If 
  Next POSIZIONE
  Close 1
  PUNTEGGIOMASSIMO=Val(PUNTEGGIODELGIOCATORE$(0))
  Inc POSIZIONE
 End If 
End Proc
Procedure CARICAISUONI
 ' Load the sounds
 Load PERCORSODELLAMUSICA$+SUONI$
End Proc
Procedure CREALEIMMAGINIPERLERIGHE
 ' Create the row images
 XFINALERIGA=XPANNELLO-1
 IMMAGINERIGAUNO=IMMAGINEPALLINA+1
 Ink 20 : Bar 0,251 To XFINALERIGA,255
 Get Bob IMMAGINERIGAUNO,0,251 To XFINALERIGA+1,255+1
 Hot Spot IMMAGINERIGAUNO,XFINALERIGA,0
 IMMAGINERIGADUE=IMMAGINERIGAUNO+1
 Ink 21 : Bar 0,251 To XFINALERIGA,255
 Get Bob IMMAGINERIGADUE,0,251 To XFINALERIGA+1,255+1
 Hot Spot IMMAGINERIGADUE,XFINALERIGA,0
 IMMAGINERIGATRE=IMMAGINERIGADUE+1
 Ink 22 : Bar 0,251 To XFINALERIGA,255
 Get Bob IMMAGINERIGATRE,0,251 To XFINALERIGA+1,255+1
 Hot Spot IMMAGINERIGATRE,XFINALERIGA,0
 Ink 0 : Bar 0,251 To XFINALERIGA,255
End Proc
Procedure CREATESTOBORDATO[XTESTO,YTESTO,TESTO$,C0LORETESTO,C0LOREBORDO]
 ' Create outlined text 
 Ink C0LOREBORDO
 Text XTESTO,YTESTO-1,TESTO$
 Text XTESTO+1,YTESTO-1,TESTO$
 Text XTESTO+1,YTESTO,TESTO$
 Text XTESTO+1,YTESTO+1,TESTO$
 Text XTESTO,YTESTO+1,TESTO$
 Text XTESTO-1,YTESTO+1,TESTO$
 Text XTESTO-1,YTESTO,TESTO$
 Text XTESTO-1,YTESTO-1,TESTO$
 Ink C0LORETESTO
 Text XTESTO,YTESTO,TESTO$
End Proc
Procedure DABANCOAVARIABILI
 ' Copy from bank to variables
 If Length(BANCO)>0
  INDIRIZZO=Start(BANCO)+9
  For A=0 To 246
   MATTONCINO(A)=Peek(INDIRIZZO)
   Inc INDIRIZZO
  Next A
  For A=0 To 255
   ARCOBALENO=Peek(INDIRIZZO)
   Inc INDIRIZZO
   ARCOBALENO=ARCOBALENO+Peek(INDIRIZZO)*$100
   Rain(0,A)=ARCOBALENO : Rainbow 0,257,0,271
   Wait Vbl 
   Inc INDIRIZZO
  Next A
  BONUS=Peek(INDIRIZZO)
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*100
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*10000
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*1000000
  Inc INDIRIZZO
 End If 
 Erase BANCO
End Proc
Procedure DISSOLVENZADEICOLORI[C0LORE,VELOCITA,M0DO]
 ' Fade the colours 
 If M0DO=0
  For C=0 To C0LORIDELLOSCHERMOMENOUNO
   Colour C,C0LORE
   If VELOCITA>0
    Wait VELOCITA
   End If 
  Next C
 Else 
  Dim ROSSO(C0LORIDELLOSCHERMOMENOUNO),VERDE(C0LORIDELLOSCHERMOMENOUNO),BLU(C0LORIDELLOSCHERMOMENOUNO)
  Dim ROSSOFINALE(C0LORIDELLOSCHERMOMENOUNO),VERDEFINALE(C0LORIDELLOSCHERMOMENOUNO),BLUFINALE(C0LORIDELLOSCHERMOMENOUNO)
  Dim ROSSODISSOLTO(C0LORIDELLOSCHERMOMENOUNO),VERDEDISSOLTO(C0LORIDELLOSCHERMOMENOUNO),BLUDISSOLTO(C0LORIDELLOSCHERMOMENOUNO)
  For C=0 To C0LORIDELLOSCHERMOMENOUNO
   If M0DO=1
    ROSSOFINALE(C)=C0LORE/256
    VERDEFINALE(C)=C0LORE/16 mod 16
    BLUFINALE(C)=C0LORE mod 16
   Else If M0DO=2
    ROSSOFINALE(C)=C0LORE(C)/256
    VERDEFINALE(C)=C0LORE(C)/16 mod 16
    BLUFINALE(C)=C0LORE(C) mod 16
   End If 
   ROSSO(C)=Colour(C)/256
   VERDE(C)=Colour(C)/16 mod 16
   BLU(C)=Colour(C) mod 16
  Next C
  Repeat 
   For C=0 To C0LORIDELLOSCHERMOMENOUNO
    If ROSSODISSOLTO(C)=FALSO
     If ROSSO(C)<ROSSOFINALE(C)
      Inc ROSSO(C)
     Else If ROSSO(C)=ROSSOFINALE(C)
      ROSSODISSOLTO(C)=VERO
     Else If ROSSO(C)>ROSSOFINALE(C)
      Dec ROSSO(C)
     End If 
    End If 
    If VERDEDISSOLTO(C)=FALSO
     If VERDE(C)<VERDEFINALE(C)
      Inc VERDE(C)
     Else If VERDE(C)=VERDEFINALE(C)
      VERDEDISSOLTO(C)=VERO
     Else If VERDE(C)>VERDEFINALE(C)
      Dec VERDE(C)
     End If 
    End If 
    If BLUDISSOLTO(C)=FALSO
     If BLU(C)<BLUFINALE(C)
      Inc BLU(C)
     Else If BLU(C)=BLUFINALE(C)
      BLUDISSOLTO(C)=VERO
     Else If BLU(C)>BLUFINALE(C)
      Dec BLU(C)
     End If 
    End If 
    Colour C,ROSSO(C)*256+VERDE(C)*16+BLU(C)
    If C=0
     C0LORIDISSOLTI=0
    End If 
    If ROSSODISSOLTO(C)=VERO
     If VERDEDISSOLTO(C)=VERO
      If BLUDISSOLTO(C)=VERO
       Inc C0LORIDISSOLTI
      End If 
     End If 
    End If 
   Next C
   If VELOCITA>0
    Wait VELOCITA
   End If 
  Until C0LORIDISSOLTI=C0LORIDELLOSCHERMOMENOUNO+1
 End If 
End Proc
Procedure FAIINSERIREALGIOCATOREILSUOPUNTEGGIO
 ' Let the player type his/her name and then insert name and score in the top 
 ' hundred scores 
 GIOCATORE$="Anonymous"
 Repeat 
  MESSAGGIO$=""
  MESSAGGIO$=MESSAGGIO$+"You have entered the Top Hundred Scores..."+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+"...at position"+Str$(POSIZIONE)+"."+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+"Please backspace the Anonymous player..."+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+"...and type your name; press Return when done."+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+GIOCATORE$+Chr$(10)
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[MESSAGGIO$,22,20,1,9000]
  If TASTO=0
   GIOCATORE$="Anonymous" : TASTO=13
  End If 
  If TASTO>255
   TASTO=TASTO mod 256
  End If 
  If TASTO=8
   GIOCATORE$=Left$(GIOCATORE$,Len(GIOCATORE$)-1)
  Else If TASTO=27
   TASTO=13 : TASTOESCAPEPREMUTO=VERO
  Else If TASTO>31
   GIOCATORE$=GIOCATORE$+Chr$(TASTO)
  End If 
 Until TASTO=13
 If TASTOESCAPEPREMUTO=FALSO
  For POSIZIONI=98 To 0 Step -1
   If Val(PUNTEGGIODELGIOCATORE$(POSIZIONI))<PUNTEGGIO
    NOMEDELGIOCATORE$(POSIZIONI+1)=NOMEDELGIOCATORE$(POSIZIONI)
    PUNTEGGIODELGIOCATORE$(POSIZIONI+1)=PUNTEGGIODELGIOCATORE$(POSIZIONI)
    LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONI+1)=LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONI)
   End If 
  Next POSIZIONI
  NOMEDELGIOCATORE$(POSIZIONE-1)=GIOCATORE$
  PUNTEGGIODELGIOCATORE$(POSIZIONE-1)=Str$(PUNTEGGIO)-" "
  If LIVELLO<0
   LIVELLO= Not LIVELLO
  End If 
  LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONE-1)=Str$(LIVELLO)-" "
 End If 
End Proc
Procedure HAISPARATOILRAGGIOLASER
 ' Fire the laser ray 
 If LASER>0 and RAGGIOLASERSPARATO=FALSO
  XLASER=XBARRA : YLASER=YBARRA+5 : IMMAGINERAGGIOLASER=9+LASER
  RAGGIOLASERSPARATO=VERO
  If SUONICARICATI=VERO
   Sam Play VOCE,4,8363/SEMITONO#^LASER : Proc VOCESEGUENTE
  Else 
   Shoot 
  End If 
 End If 
End Proc
Procedure ILBOINGESTATOCOLPITO[BOING]
 ' Check if the specified boing has been hitted 
 If Bob Col(OGGETTOBOING+BOING,OGGETTOPALLINA To OGGETTOPALLINA+MASSIMOPALLINEINCAMPO-1)=VERO
  PALLINA=Col(-1)-OGGETTOPALLINA
  XDISTANZADELLAPALLINADALBOINGCOLPITO=Abs(XBOING(BOING)-Int(XPALLINA#(PALLINA)))
  If XDISTANZADELLAPALLINADALBOINGCOLPITO>9
   DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
  End If 
  YDISTANZADELLAPALLINADALBOINGCOLPITO=Abs(YBOING(BOING)-Int(YPALLINA#(PALLINA)))
  If YDISTANZADELLAPALLINADALBOINGCOLPITO>9
   DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
  End If 
  Add PUNTEGGIO,3 : Proc MOSTRAILPUNTEGGIO[VERO]
  BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Bell 3
  End If 
 Else If Bob Col(OGGETTOBOING+BOING,OGGETTORAGGIOLASER To OGGETTORAGGIOLASER)=VERO
  Proc CANCELLAILRAGGIOLASER
  Add PUNTEGGIO,2 : Proc MOSTRAILPUNTEGGIO[VERO]
  BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Bell 2
  End If 
 Else If Bob Col(OGGETTOBOING+BOING,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
  Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
  BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Bell 1
  End If 
 End If 
End Proc
Procedure ILBOINGEUSCITODALCAMPODIGIOCO[BOING]
 ' Check if the specified boing has gone out of the game field
 If YBOING(BOING)>255+9 Then BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
End Proc
Procedure ILGUANOEUSCITODALCAMPODIGIOCO
 ' Check if the guano has gone out of the game field
 If YGUANO>255 Then Proc CANCELLAILGUANO
End Proc
Procedure ILPAPEROALIENOESTATOCOLPITO
 'check if the alien duck has been hitted 
 If Bob Col(OGGETTOPAPEROALIENO,OGGETTOPALLINA To OGGETTOPALLINA+MASSIMOPALLINEINCAMPO-1)=VERO
  PALLINA=Col(-1)-OGGETTOPALLINA
  XPALLINA=Int(XPALLINA#(PALLINA))
  XDISTANZADELLAPALLINADALPAPEROALIENO=Abs(XPAPEROALIENO-XPALLINA)
  If XDISTANZADELLAPALLINADALPAPEROALIENO>12
   DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
  End If 
  YPALLINA=Int(YPALLINA#(PALLINA))
  YDISTANZADELLAPALLINADALPAPEROALIENO=YPAPEROALIENO-YPALLINA
  If YDISTANZADELLAPALLINADALPAPEROALIENO>-21 and YDISTANZADELLAPALLINADALPAPEROALIENO<10
   DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
  End If 
  Add PUNTEGGIO,24 : Proc MOSTRAILPUNTEGGIO[VERO]
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Boom 
  End If 
  _PAPEROALIENOCOLPITO=VERO
 Else If Bob Col(OGGETTOPAPEROALIENO,OGGETTORAGGIOLASER To OGGETTORAGGIOLASER)=VERO
  Proc CANCELLAILRAGGIOLASER
  Add PUNTEGGIO,12 : Proc MOSTRAILPUNTEGGIO[VERO]
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Boom 
  End If 
  _PAPEROALIENOCOLPITO=VERO
 Else If Bob Col(OGGETTOPAPEROALIENO,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
  Add PUNTEGGIO,6 : Proc MOSTRAILPUNTEGGIO[VERO]
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Boom 
  End If 
  _PAPEROALIENOCOLPITO=VERO
 End If 
 If _PAPEROALIENOCOLPITO=VERO
  Proc CANCELLAILPAPEROALIENO
  Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELPAPEROALIENO
  Proc CANCELLAILGUANO
 End If 
End Proc
Procedure ILPAPEROALIENOEUSCITODALCAMPODIGIOCO
 ' Check if the alien duck has gone out of the game field 
 If YPAPEROALIENO>255+9 Then Proc CANCELLAILPAPEROALIENO
End Proc
Procedure ILRUBAPALLINAESTATOCOLPITO
 ' Check if the ballthief has been hitted 
 If RUBAPALLINACOLPITO=FALSO
  For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
   If PALLINAPRESADALRUBAPALLINA<MASSIMOPALLINEINCAMPO
    If PALLINA<>PALLINAPRESADALRUBAPALLINA
     If Bob Col(OGGETTORUBAPALLINA,OGGETTOPALLINA+PALLINA To OGGETTOPALLINA+PALLINA)=VERO
      XPALLINA=Int(XPALLINA#(PALLINA))
      XDISTANZADELLAPALLINADALRUBAPALLINA=Abs(XRUBAPALLINA-XPALLINA)
      If XDISTANZADELLAPALLINADALRUBAPALLINA>12
       DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
      End If 
      YPALLINA=Int(YPALLINA#(PALLINA))
      YDISTANZADELLAPALLINADALRUBAPALLINA=YRUBAPALLINA-YPALLINA
      If YDISTANZADELLAPALLINADALRUBAPALLINA>0 and YDISTANZADELLAPALLINADALRUBAPALLINA<11
       DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
      End If 
      Add PUNTEGGIO,50 : Proc MOSTRAILPUNTEGGIO[VERO]
      If SUONICARICATI=VERO
       Sam Play VOCE,9 : Proc VOCESEGUENTE
      Else 
       Boom 
      End If 
      RUBAPALLINACOLPITO=VERO
     End If 
    End If 
   End If 
  Next PALLINA
  If Bob Col(OGGETTORUBAPALLINA,OGGETTORAGGIOLASER To OGGETTORAGGIOLASER)=VERO
   Proc CANCELLAILRAGGIOLASER
   Add PUNTEGGIO,100 : Proc MOSTRAILPUNTEGGIO[VERO]
   If SUONICARICATI=VERO
    Sam Play VOCE,9 : Proc VOCESEGUENTE
   Else 
    Boom 
   End If 
   RUBAPALLINACOLPITO=VERO
  Else If Bob Col(OGGETTORUBAPALLINA,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
   Add PUNTEGGIO,200 : Proc MOSTRAILPUNTEGGIO[VERO]
   If SUONICARICATI=VERO
    Sam Play VOCE,9 : Proc VOCESEGUENTE
   Else 
    Boom 
   End If 
   RUBAPALLINACOLPITO=VERO
  End If 
 Else 
  Inc IMMAGINERUBAPALLINA
  If IMMAGINERUBAPALLINA=10
   Proc CANCELLAILRUBAPALLINA
   Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELRUBAPALLINA
   If PALLINAPRESADALRUBAPALLINA<MASSIMOPALLINEINCAMPO
    PALLINA(PALLINAPRESADALRUBAPALLINA)=VERO
   End If 
   PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
   IMMAGINERUBAPALLINA=0
   RUBAPALLINACOLPITO=FALSO
  End If 
 End If 
End Proc
Procedure ILRUBAPALLINAEUSCITODALCAMPODIGIOCO
 ' Check if the ballthief has gone out of the game field
 If YRUBAPALLINA<-4
  Proc CANCELLAILRUBAPALLINA
  PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
  Dec PALLINEINCAMPO
 End If 
End Proc
Procedure IMPOSTAGLIOGGETTI
 ' Set the object images
 IMMAGINEPALLINA=Length(1)
 IMMAGINELASER=6
 MATTONCINIDIPOTENZIAMENTO=Length(1)-IMMAGINIBOING-IMMAGINIRUBAPALLINA-IMMAGINIGUANO-IMMAGINIPAPERO*2-116
 For IMMAGINE=0 To IMMAGINIBOING-1
  IMMAGINEBOING(IMMAGINE)=IMMAGINEPALLINA-IMMAGINIBOING+IMMAGINE
 Next IMMAGINE
 For IMMAGINE=0 To IMMAGINIRUBAPALLINA-1
  IMMAGINERUBAPALLINA(IMMAGINE)=IMMAGINEPALLINA-IMMAGINIBOING-IMMAGINIRUBAPALLINA+IMMAGINE
 Next IMMAGINE
 IMMAGINEGUANO=IMMAGINEPALLINA-IMMAGINIBOING-IMMAGINIRUBAPALLINA-IMMAGINIGUANO
 For IMMAGINE=0 To IMMAGINIPAPERO-1
  IMMAGINEPAPEROALIENO(IMMAGINE)=IMMAGINEPALLINA-IMMAGINIBOING-IMMAGINIRUBAPALLINA-IMMAGINIGUANO-IMMAGINIPAPERO+IMMAGINE
 Next IMMAGINE
 For IMMAGINE=0 To IMMAGINIPAPERO-1
  IMMAGINEPAPERO(IMMAGINE)=IMMAGINEPALLINA-IMMAGINIBOING-IMMAGINIRUBAPALLINA-IMMAGINIGUANO-IMMAGINIPAPERO*2+IMMAGINE
 Next IMMAGINE
End Proc
Procedure IMPOSTAIBOING
 ' Set the boings to their initial status   
 For BOING=0 To MASSIMOBOINGINCAMPO-1
  BOING(BOING)=0
 Next BOING
End Proc
Procedure IMPOSTAICOLORI
 ' Remember the screen palette
 Get Bob Palette 
 C0LORIDELLOSCHERMOMENOUNO=Screen Colour-1
 If C0LORIDELLOSCHERMOMENOUNO=63 Then C0LORIDELLOSCHERMOMENOUNO=31
 For C=0 To C0LORIDELLOSCHERMOMENOUNO
  C0LORE(C)=Colour(C)
 Next C
End Proc
Procedure IMPOSTAILAMPEGGI
 ' Set the colour flashes 
 Flash 20,"(0FF,2)(FFF,1)(0FF,2)(000,1)"
 Flash 21,"(F70,2)(FFF,1)(F70,2)(000,1)"
 Flash 22,"(F77,9)(FF7,9)(7F7,9)(7FF,9)(77F,9)(F7F,9)"
End Proc
Procedure IMPOSTAILRIMBALZODELLEPALLINE
 ' Set the bouncign of the balls to their initial state 
 For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
  LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=FALSO
 Next PALLINA
End Proc
Procedure IMPOSTAILRITARDODELLENTRATAINCAMPODELPAPEROALIENO
 RITARDODELLENTRATAINCAMPODELPAPEROALIENO=29475-LIVELLO*25
End Proc
Procedure IMPOSTAILRITARDODELLENTRATAINCAMPODELRUBAPALLINA
 RITARDODELLENTRATAINCAMPODELRUBAPALLINA=55950-LIVELLO*50
End Proc
Procedure IMPOSTAIPERCORSIDEIFILE
 ' Look for the file paths
 PERCORSODELLAGRAFICA$=PERCORSO$+"Grafica/"
 PERCORSODEILIVELLI$=PERCORSO$+"Livelli/"
 PERCORSODELLAMUSICA$=PERCORSO$+"Musica/"
End Proc
Procedure IMPOSTALADURATADELLERIGHE
 ' Set the time duration of the rows in 50th of a second  
 DURATADELLARIGA(0)=3000
 DURATADELLARIGA(1)=9000
 DURATADELLARIGA(2)=27000
End Proc
Procedure IMPOSTALARCOBALENO
 ' Set the rainbow
 Set Rainbow 0,0,271,"","",""
 For LINEADELLARCOBALENO=0 To 255
  Rain(0,LINEADELLARCOBALENO)=$FFF
 Next LINEADELLARCOBALENO
 Rainbow 0,257,0,271
End Proc
Procedure IMPOSTALEVOCI
 'Set the audio voices
 For VOCE=0 To 3
  VOCE(VOCE)=2^VOCE
 Next VOCE
End Proc
Procedure IMPOSTALEZONEDEIMATTONCINI
 ' Set the brick detection zones
 Reserve Zone 264
 For MATTONCINO=0 To 246
  LINEADELMATTONCINO=MATTONCINO/13 : RIGADELMATTONCINO=MATTONCINO mod 13
  X0ZONA(MATTONCINO)=RIGADELMATTONCINO*21
  Y0ZONA(MATTONCINO)=LINEADELMATTONCINO*11
  X0MATTONCINO=X0ZONA(MATTONCINO)
  Y0MATTONCINO=Y0ZONA(MATTONCINO)
  If RIGADELMATTONCINO=12
   X1MATTONCINO=X0MATTONCINO+19
   Y1MATTONCINO=Y0MATTONCINO+9
  Else 
   X1MATTONCINO=X0MATTONCINO+20
   Y1MATTONCINO=Y0MATTONCINO+10
  End If 
  Set Zone MATTONCINO+1,X0MATTONCINO,Y0MATTONCINO To X1MATTONCINO,Y1MATTONCINO
 Next MATTONCINO
End Proc
Procedure IMPOSTALINGOMBRODELLABARRA
 ' Set the length of the bars from the center to an edge
 INGOMBRODELLABARRA(0)=10
 INGOMBRODELLABARRA(1)=16
 INGOMBRODELLABARRA(2)=31
End Proc
Procedure IMPOSTALOSCHERMO
 ' Set the screen 
 Screen Open 0,320,256,64,Lowres : Curs Off : Flash Off : Pen 1 : Paper 0 : Cls 
 Bob Update Off : Gr Writing 0 : Wait Vbl : Limit Mouse 
End Proc
Procedure INDIVIDUALAPOSIZIONEDELPROGRAMMA
 ' Look for the position of the program 
 PERCORSO$=Dir$
End Proc
Procedure LABARRAESTATACOLPITADALGUANO
 'Check if the bar has been hitted by the guano 
 If GUANOINCAMPO=VERO and GUANOMOLLATO=VERO
  If Bob Col(OGGETTOGUANO,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
   EFFETTODELGUANO=Rnd(2)
   If EFFETTODELGUANO=2
    If LASER>0
     Dec LASER
    End If 
   Else If EFFETTODELGUANO=1
    _BARRABLOCCATA=50+LIVELLO
   End If 
   Proc CANCELLAILGUANO
  End If 
 End If 
End Proc
Procedure LABARRAESTATACOLPITADALRAGGIOLASERRIFLESSO
 ' Check if the bar  has been hitted by the reflected laser ray 
 If RAGGIOLASERSPARATO=VERO and RAGGIOLASERRIFLESSO=VERO
  If Bob Col(OGGETTORAGGIOLASER,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
   EFFETTODELRAGGIOLASERRIFLESSO=Rnd(2)
   If EFFETTODELRAGGIOLASERRIFLESSO=2
    If LASER>0
     Dec LASER
    End If 
   Else If EFFETTODELRAGGIOLASERRIFLESSO=1
    _BARRABLOCCATA=50+LIVELLO
   End If 
   Proc CANCELLAILRAGGIOLASER
   RAGGIOLASERRIFLESSO=FALSO
  End If 
 End If 
End Proc
Procedure LAPALLINAEUSCITADALCAMPODIGIOCO[PALLINA]
 ' Check if the specified ball has gone out of the game field 
 If YPALLINA#(PALLINA)>255+3
  Proc CANCELLALAPALLINA[PALLINA]
  PALLINA(PALLINA)=FALSO
  Dec PALLINEINCAMPO
 End If 
End Proc
Procedure LAPALLINAHACOLPITOLABARRA[PALLINA]
 ' Check if the specified ball has hitted the bar 
 If Bob Col(OGGETTOPALLINA+PALLINA,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
  If LAPALLINAHACOLPITOLABARRA(PALLINA)=FALSO
   If C0LLA=VERO
    XCOLLA(PALLINA)=XBARRA-Int(XPALLINA#(PALLINA))
    YCOLLA(PALLINA)=YBARRA-Int(YPALLINA#(PALLINA))
    LAPALLINAERIMASTAINCOLLATAALLABARRA(PALLINA)=VERO
   End If 
   If Col(OGGETTOCENTRODELLABARRA)=VERO
    If LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=VERO
     DELTAXPALLINA#(PALLINA)=DELTAXPALLINA#(PALLINA)/2.0
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)*2
     LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=FALSO
    Else 
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,2 : Proc VOCESEGUENTE
    Else 
     Boom 
    End If 
   Else If Col(OGGETTOLATIDELLABARRA)=VERO
    If LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=VERO
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
    Else 
     DELTAXPALLINA#(PALLINA)=DELTAXPALLINA#(PALLINA)*2
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)/2.0
     LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=VERO
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,2,8363/2 : Proc VOCESEGUENTE
    Else 
     Boom 
    End If 
   End If 
   LAPALLINAHACOLPITOLABARRA(PALLINA)=VERO
  End If 
 Else 
  LAPALLINAHACOLPITOLABARRA(PALLINA)=FALSO
 End If 
End Proc
Procedure LAPALLINAHACOLPITOLARIGA[PALLINA]
 ' Check if the specified ball has hitted the row 
 If Bob Col(OGGETTOPALLINA+PALLINA,OGGETTORIGA To OGGETTORIGA)=VERO
  If DELTAYPALLINA#(PALLINA)>0
   DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
   If SUONICARICATI=VERO
    Sam Play VOCE,7 : Proc VOCESEGUENTE
   Else 
    Bell 96
   End If 
  End If 
 End If 
End Proc
Procedure LIMITAIMOVIMENTIDELLABARRA
 ' Lock bar movements 
 X0LIMITETOPO=X Hard(INGOMBRODELLABARRA(LUNGHEZZADELLABARRA))
 Y0LIMITETOPO=Y Hard(0)
 X1LIMITETOPO=X Hard(XPANNELLO-1-INGOMBRODELLABARRA(LUNGHEZZADELLABARRA))
 Y1LIMITETOPO=Y Hard(Screen Height-1)
 Limit Mouse X0LIMITETOPO,Y0LIMITETOPO To X1LIMITETOPO,Y1LIMITETOPO
End Proc
Procedure LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
 ' Lock bar movements while it is changing
 If OGGETTO>39 and OGGETTO<46
  INGOMBRODELLABARRA=46-OGGETTO+10
 Else If OGGETTO>12 and OGGETTO<27
  INGOMBRODELLABARRA=OGGETTO+4
 End If 
 X0LIMITETOPO=X Hard(INGOMBRODELLABARRA)
 Y0LIMITETOPO=Y Hard(0)
 X1LIMITETOPO=X Hard(XPANNELLO-1-INGOMBRODELLABARRA)
 Y1LIMITETOPO=Y Hard(Screen Height-1)
 Wait Vbl 
 Limit Mouse X0LIMITETOPO,Y0LIMITETOPO To X1LIMITETOPO,Y1LIMITETOPO
End Proc
Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
 '-> Limiti by Stefano Regattin 
 'i> 19 maggio 1996 
 'm> 12 giugno 1996 
 '--------------------------------------------------------
 'La procedura equivale alle seguenti linee di programma: 
 ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
 ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
 'Se LIMITEMINIMO è maggiore di LIMITEMASSIMO ne scambia i valori 
 '----------------------------------------------------------------  
 If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
 NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
End Proc[NUMERO]
Procedure MATTONCINIDIPOTENZIAMENTO[MATTONCINO,ESCESEUGUALEAZERO]
 ' Manage the bonus bricks
 If ESCESEUGUALEAZERO>0 Then Pop Proc
 If MATTONCINO=0
  For MATTONCINODIPOTENZIAMENTO=0 To MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1
   TIPODIMATTONCINODIPOTENZIAMENTO=MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)
   If TIPODIMATTONCINODIPOTENZIAMENTO>0
    Bob OGGETTOMATTONCINODIPOTENZIAMENTO+MATTONCINODIPOTENZIAMENTO,XMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO),YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO),115+TIPODIMATTONCINODIPOTENZIAMENTO
    Proc MATTONCINODIPOTENZIAMENTOPRESODALLABARRA[MATTONCINODIPOTENZIAMENTO,TIPODIMATTONCINODIPOTENZIAMENTO]
    Inc YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)
    Proc MATTONCINODIPOTENZIAMENTOUSCITODALCAMPODIGIOCO[MATTONCINODIPOTENZIAMENTO]
   End If 
  Next MATTONCINODIPOTENZIAMENTO
 Else 
  For MATTONCINODIPOTENZIAMENTO=0 To MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1
   TIPODIMATTONCINODIPOTENZIAMENTO=MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)
   If TIPODIMATTONCINODIPOTENZIAMENTO=0
    If MATTONCINO>0
     MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=Rnd(19)+1
     XMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=X0ZONA(MATTONCINO-1)
     YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=Y0ZONA(MATTONCINO-1)
    Else If MATTONCINO<0
     MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=-MATTONCINO
     XMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=XBARRA-9
     YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=-9
    End If 
    Exit 
   End If 
  Next MATTONCINODIPOTENZIAMENTO
 End If 
End Proc
Procedure MATTONCINOCOLPITODALLAPALLINA[PALLINA]
 ' Check if a brick has been hitted by the specified ball 
 XPALLINA=Int(XPALLINA#(PALLINA)) : YPALLINA=Int(YPALLINA#(PALLINA))
 MATTONCINO=Zone(XPALLINA,YPALLINA)
 If MATTONCINO>0
  MATTONELLA=MATTONCINO(MATTONCINO-1)
  If MATTONELLA>0
   If MATTONELLA<10
    MATTONCINOELIMINATODALLAPALLINA=VERO
   Else If MATTONELLA>9 and MATTONELLA<28
    Add MATTONELLA,-9
    MATTONCINO(MATTONCINO-1)=MATTONELLA
    Proc RIDISEGNODELMATTONCINO[MATTONCINO,100]
   Else 
    Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINO,Rnd(9)]
    MATTONCINOELIMINABILESOLODALRAGGIOLASER=VERO
   End If 
   If MATTONCINOELIMINATODALLAPALLINA=VERO
    Dec MATTONCINI : Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
    Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINO,Rnd(19)]
    Proc RIDISEGNODELMATTONCINO[MATTONCINO,100]
    MATTONCINO(MATTONCINO-1)=0
   End If 
   Y0MATTONCINO=Y0ZONA(MATTONCINO-1)
   Y1MATTONCINO=Y0MATTONCINO+9
   If RIMBALZODELLEPALLINESUIMATTONCINI=VERO
    If YPALLINA<Y1MATTONCINO and YPALLINA>Y0MATTONCINO
     DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
    Else 
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
    End If 
    If MATTONCINOELIMINABILESOLODALRAGGIOLASER=VERO
     If SUONICARICATI=VERO
      Sam Play VOCE,3,8363*SEMITONO#^4 : Proc VOCESEGUENTE
     Else 
      Bell 40
     End If 
    Else 
     If SUONICARICATI=VERO
      Sam Play VOCE,3 : Proc VOCESEGUENTE
     Else 
      Bell 30
     End If 
    End If 
   Else 
    If MATTONCINOELIMINABILESOLODALRAGGIOLASER=VERO
     If SUONICARICATI=VERO
      Sam Play VOCE,6,8363*SEMITONO#^4 : Proc VOCESEGUENTE
     Else 
      Bell 60
     End If 
    Else 
     If SUONICARICATI=VERO
      Sam Play VOCE,6 : Proc VOCESEGUENTE
     Else 
      Bell 50
     End If 
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MATTONCINOCOLPITODALRAGGIOLASER
 ' Check if a brick has been hitted by the laser ray
 If RAGGIOLASERSPARATO=VERO
  MATTONCINO=Zone(XLASER,YLASER)
  If MATTONCINO>0
   MATTONELLA=MATTONCINO(MATTONCINO-1)
   If MATTONELLA>0
    If MATTONELLA<10
     MATTONCINOELIMINATODALRAGGIOLASER=VERO
    Else If MATTONELLA>9 and MATTONELLA<28
     Proc CANCELLAILRAGGIOLASER
     Add MATTONELLA,-9
     MATTONCINO(MATTONCINO-1)=MATTONELLA
     Proc RIDISEGNODELMATTONCINO[MATTONCINO,100]
    Else 
     If MATTONELLA=28
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=29 and LASER>1
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=30 and LASER=3
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=31
      RAGGIOLASERRIFLESSO=VERO
      QUESTOEILMATTONCINOCHEHARIFLESSOILRAGGIOLASER=VERO
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=32 and LASER>1
      RAGGIOLASERRIFLESSO=VERO
      QUESTOEILMATTONCINOCHEHARIFLESSOILRAGGIOLASER=VERO
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=33 and LASER=3
      RAGGIOLASERRIFLESSO=VERO
      QUESTOEILMATTONCINOCHEHARIFLESSOILRAGGIOLASER=VERO
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     End If 
    End If 
    If MATTONCINOELIMINATODALRAGGIOLASER=VERO
     If RAGGIOLASERRIFLESSO=FALSO or QUESTOEILMATTONCINOCHEHARIFLESSOILRAGGIOLASER=FALSO
      Proc CANCELLAILRAGGIOLASER
     End If 
     Proc RIDISEGNODELMATTONCINO[MATTONCINO,100]
     Dec MATTONCINI : Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
     Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINO,Rnd(9)]
     MATTONCINO(MATTONCINO-1)=0
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MATTONCINODIPOTENZIAMENTOPRESODALLABARRA[MATTONCINODIPOTENZIAMENTO,TIPODIMATTONCINODIPOTENZIAMENTO]
 ' Check if the bar has met the specified bonus brick 
 If Bob Col(OGGETTOMATTONCINODIPOTENZIAMENTO+MATTONCINODIPOTENZIAMENTO,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
  If TIPODIMATTONCINODIPOTENZIAMENTO=MATTONCINIDIPOTENZIAMENTO
   MATTONCINODIPOTENZIAMENTOASORPRESA=VERO
   Add PUNTEGGIO,20
  Else 
   Add PUNTEGGIO,10
  End If 
  Proc MOSTRAILPUNTEGGIO[VERO]
  Proc CANCELLAILMATTONCINODIPOTENZIAMENTO[MATTONCINODIPOTENZIAMENTO]
  Repeat 
   If TIPODIMATTONCINODIPOTENZIAMENTO=1 : Rem add a ball in the game field 
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=FALSO
      PALLINA(PALLINA)=VERO
      XPALLINA#(PALLINA)=XBARRA
      YPALLINA#(PALLINA)=YBARRA-3
      VELOCITADELLAPALLINA#(PALLINA)=1
      D1REZIONEXPALLINA=Rnd(1)
      If D1REZIONEXPALLINA=1
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)
      Else 
       DELTAXPALLINA#(PALLINA)=-VELOCITADELLAPALLINA#(PALLINA)
      End If 
      DELTAYPALLINA#(PALLINA)=-VELOCITADELLAPALLINA#(PALLINA)
      Inc PALLINEINCAMPO
      Exit 
     End If 
    Next 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=2 : Rem b(all)+  
    If PALLINE<1000
     Inc PALLINE : Proc MOSTRALEPALLINERIMASTE
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=3 : Rem b(all)-    
    If PALLINE>0
     Dec PALLINE : Proc MOSTRALEPALLINERIMASTE
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=4 : Rem B(ar)+ 
    If LUNGHEZZADELLABARRA<2
     Inc LUNGHEZZADELLABARRACAMBIATA
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=5 : Rem B(ar)- 
    If LUNGHEZZADELLABARRA>0
     Dec LUNGHEZZADELLABARRACAMBIATA
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=6 : Rem D(uck) 
    _PAPEROINCAMPO= Not _PAPEROINCAMPO
    If _PAPEROINCAMPO=VERO
     If SUONICARICATI=VERO
      Sam Play VOCE,16 : Proc VOCESEGUENTE
     Else 
      Bell 30
     End If 
    Else 
     Proc CANCELLAILPAPERO
     If SUONICARICATI=VERO
      Sam Play VOCE,17 : Proc VOCESEGUENTE
     Else 
      Bell 10
     End If 
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=7 : Rem G(lue) 
    C0LLA= Not C0LLA
    If C0LLA=VERO
     If SUONICARICATI=VERO
      Sam Play VOCE,16 : Proc VOCESEGUENTE
     Else 
      Bell 30
     End If 
    Else 
     If SUONICARICATI=VERO
      Sam Play VOCE,17 : Proc VOCESEGUENTE
     Else 
      Bell 10
     End If 
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=8 : Rem L(aser)+ 
    If LASER=-1
     LASER=1
    Else If LASER=1
     LASER=2
    Else If LASER=2
     LASER=3
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=9 : Rem L(aser)- 
    If LASER>0
     Dec LASER
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=10 : Rem N(ext level) 
    MATTONCINIRIMASTI=MATTONCINI : MATTONCINI=0
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=11 : Rem P(oints)+  
    If MATTONCINODIPOTENZIAMENTOASORPRESA=VERO
     If PUNTEGGIO<9999800
      Add PUNTEGGIO,180
     End If 
    Else 
     If PUNTEGGIO<9999900
      Add PUNTEGGIO,90
     End If 
    End If 
    Proc MOSTRAILPUNTEGGIO[VERO]
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=12 : Rem P(oints)-  
    If MATTONCINODIPOTENZIAMENTOASORPRESA=VERO
     Add PUNTEGGIO,-220
    Else 
     Add PUNTEGGIO,-110
    End If 
    If PUNTEGGIO<0
     PUNTEGGIO=0
    End If 
    Proc MOSTRAILPUNTEGGIO[VERO]
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=13 : Rem R(ow)+ 
    If RIGA<3
     T0GLILARIGA=RIGA : Inc RIGA
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=14 : Rem R(ow)- 
    If RIGA>0
     T0GLILARIGA=RIGA : RIGA=0
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=15 : Rem S(peed)+ 
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=VERO and VELOCITADELLAPALLINA#(PALLINA)<8
      VELOCITADELLAPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)+0.5
      If LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*2*Sgn(DELTAXPALLINA#(PALLINA))
       DELTAYPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)/2.0*Sgn(DELTAYPALLINA#(PALLINA))
      Else 
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*Sgn(DELTAXPALLINA#(PALLINA))
       DELTAYPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*Sgn(DELTAYPALLINA#(PALLINA))
      End If 
     End If 
    Next PALLINA
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=16 : Rem S(peed)- 
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=VERO and VELOCITADELLAPALLINA#(PALLINA)>0.5
      VELOCITADELLAPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)-0.5
      If LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*2*Sgn(DELTAXPALLINA#(PALLINA))
       DELTAYPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)/2.0*Sgn(DELTAYPALLINA#(PALLINA))
      Else 
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*Sgn(DELTAXPALLINA#(PALLINA))
       DELTAYPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*Sgn(DELTAYPALLINA#(PALLINA))
      End If 
     End If 
    Next PALLINA
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=17 : Rem X(treme) 
    RIMBALZODELLEPALLINESUIMATTONCINI= Not RIMBALZODELLEPALLINESUIMATTONCINI
    If RIMBALZODELLEPALLINESUIMATTONCINI=FALSO
     If SUONICARICATI=VERO
      Sam Play VOCE,16 : Proc VOCESEGUENTE
     Else 
      Bell 30
     End If 
    Else 
     If SUONICARICATI=VERO
      Sam Play VOCE,17 : Proc VOCESEGUENTE
     Else 
      Bell 10
     End If 
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=18 : Rem y+ 
    If YBARRA<247
     Add YBARRA,5
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=19 : Rem y- 
    If YBARRA>197
     Add YBARRA,-5
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=MATTONCINIDIPOTENZIAMENTO : Rem ?
    TIPODIMATTONCINODIPOTENZIAMENTO=Rnd(18)+1
   End If 
  Until TIPODIMATTONCINODIPOTENZIAMENTO=0
 End If 
End Proc
Procedure MATTONCINODIPOTENZIAMENTOUSCITODALCAMPODIGIOCO[MATTONCINODIPOTENZIAMENTO]
 ' Check if the specified bonus brick has gone out of the game field
 If YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)>255
  Proc CANCELLAILMATTONCINODIPOTENZIAMENTO[MATTONCINODIPOTENZIAMENTO]
 End If 
End Proc
Procedure METTIILPANNELLO
 ' Put the panel in the game field
 XPANNELLO=Screen Width-LARGHEZZAPANNELLO
 Paste Bob XPANNELLO,0,51 : Paste Bob XPANNELLO,128,52
End Proc
Procedure METTIECONTAIMATTONCINI
 ' Put the bricks in the game field and count them
 MATTONCINI=0
 For MATTONCINO=0 To 246
  If MATTONCINO(MATTONCINO)>0
   Paste Bob X0ZONA(MATTONCINO),Y0ZONA(MATTONCINO),82+MATTONCINO(MATTONCINO)
   Inc MATTONCINI
  Else 
   Ink 0 : Bar X0ZONA(MATTONCINO),Y0ZONA(MATTONCINO) To X0ZONA(MATTONCINO)+19,Y0ZONA(MATTONCINO)+9
  End If 
 Next MATTONCINO
End Proc
Procedure METTIILGIOCOINPAUSA
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
 MESSAGGIO$="The game is paused."+Chr$(10)
 MESSAGGIO$=MESSAGGIO$+"Press a (mouse) key to continue..."
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[MESSAGGIO$,22,20,1,0]
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
End Proc
Procedure MOLLAILGUANO
 ' Drop the guano 
 If GUANOINCAMPO=VERO
  If GUANOMOLLATO=FALSO
   XGUANO=XPAPEROALIENO : YGUANO=YPAPEROALIENO+35 : GUANOMOLLATO=VERO
  Else 
   Bob OGGETTOGUANO,XGUANO,YGUANO,IMMAGINEGUANO
   Proc LABARRAESTATACOLPITADALGUANO
   Proc ILGUANOEUSCITODALCAMPODIGIOCO
   Add YGUANO,3
  End If 
 End If 
End Proc
Procedure MOSTRAICREDITI
 ' Show the credits 
 CREDITI$="EsseErre Sofware Solutions"+Chr$(10)
 CREDITI$=CREDITI$+"presents..."+Chr$(10)
 CREDITI$=CREDITI$+"************"+Chr$(10)
 CREDITI$=CREDITI$+"* MATTONITE *"+Chr$(10)
 CREDITI$=CREDITI$+"************"+Chr$(10)
 CREDITI$=CREDITI$+"by Stefano Maria Regattin"+Chr$(10)
 CREDITI$=CREDITI$+"piazza Pietro Gasparri, 4/U"+Chr$(10)
 CREDITI$=CREDITI$+"20161 Milano (Milan) Italia (Italy)"+Chr$(10)
 CREDITI$=CREDITI$+"http://utenti.tripod.it/esseerre/Stefano.html"+Chr$(10)
 CREDITI$=CREDITI$+"e-mail: esseerre@lycos.it"+Chr$(10)
 CREDITI$=CREDITI$+"This game, its editor and the related source"+Chr$(10)
 CREDITI$=CREDITI$+"codes are freely shared out."+Chr$(10)
 CREDITI$=CREDITI$+"They have been created by AMOS Professional 2.0"+Chr$(10)
 CREDITI$=CREDITI$+"and compiled by AMOS Professional Compiler 2.0."+Chr$(10)
 CREDITI$=CREDITI$+"The source codes don't require any additional"+Chr$(10)
 CREDITI$=CREDITI$+"extension."+Chr$(10)
 CREDITI$=CREDITI$+"If you will create a new game starting from these"+Chr$(10)
 CREDITI$=CREDITI$+"source codes, let me know and don't forget to"+Chr$(10)
 CREDITI$=CREDITI$+"email me and mention me in your resulting creation."+Chr$(10)
 CREDITI$=CREDITI$+"One day I have asked to my major sister Antonella"+Chr$(10)
 CREDITI$=CREDITI$+"if she would liked I created a game for her,"+Chr$(10)
 CREDITI$=CREDITI$+"assuring her I was able to create almost any"+Chr$(10)
 CREDITI$=CREDITI$+"kind of game she wanted."+Chr$(10)
 CREDITI$=CREDITI$+"The answer was yes and she specified a game"+Chr$(10)
 CREDITI$=CREDITI$+"with a bar, a bouncing ball over the bar and"+Chr$(10)
 CREDITI$=CREDITI$+"dozens of bricks deletable by the ball hit,"+Chr$(10)
 CREDITI$=CREDITI$+"gaining points for the hits."+Chr$(10)
 CREDITI$=CREDITI$+"So I started the developing of this game and"+Chr$(10)
 CREDITI$=CREDITI$+"she called it Mattonite, that in italian means"+Chr$(10)
 CREDITI$=CREDITI$+"brickache."+Chr$(10)
 CREDITI$=CREDITI$+"The purpose of the game is simple: destroy all"+Chr$(10)
 CREDITI$=CREDITI$+"the bricks by the balls hits to overcome all"+Chr$(10)
 CREDITI$=CREDITI$+"the levels and collect bonus bricks to improve"+Chr$(10)
 CREDITI$=CREDITI$+"playability."+Chr$(10)
 CREDITI$=CREDITI$+"The duck eats all the bricks, but avoid the alien"+Chr$(10)
 CREDITI$=CREDITI$+"duck's guano!"+Chr$(10)
 CREDITI$=CREDITI$+"Avoid the reflected laser ray also!"+Chr$(10)
 CREDITI$=CREDITI$+"The three flashing cyan digits report the balls"+Chr$(10)
 CREDITI$=CREDITI$+"left."+Chr$(10)
 CREDITI$=CREDITI$+"The three flasing orange digits report the"+Chr$(10)
 CREDITI$=CREDITI$+"current level."+Chr$(10)
 CREDITI$=CREDITI$+"The three flashing rainbow colours digits report"+Chr$(10)
 CREDITI$=CREDITI$+"the score position relative to the top hundred"+Chr$(10)
 CREDITI$=CREDITI$+"scores."+Chr$(10)
 CREDITI$=CREDITI$+"The seven flashing cyan digits column report"+Chr$(10)
 CREDITI$=CREDITI$+"the score."+Chr$(10)
 CREDITI$=CREDITI$+"The seven flashing orange digits column report"+Chr$(10)
 CREDITI$=CREDITI$+"the first position score."+Chr$(10)
 CREDITI$=CREDITI$+"The seven flashing rainbow colors digits report"+Chr$(10)
 CREDITI$=CREDITI$+"the current level bonus."+Chr$(10)
 CREDITI$=CREDITI$+"Press the space bar to shock the balls."+Chr$(10)
 CREDITI$=CREDITI$+"Press the shift keys to fire the laser ray over"+Chr$(10)
 CREDITI$=CREDITI$+"the bricks to hit the boings or, better, to hit"+Chr$(10)
 CREDITI$=CREDITI$+"the ballthief!"+Chr$(10)
 CREDITI$=CREDITI$+"Press the P key to pause the game."+Chr$(10)
 CREDITI$=CREDITI$+"Press a (mouse) key to scroll quickly the text"+Chr$(10)
 CREDITI$=CREDITI$+"or press the Esc key to leave the text."+Chr$(10)
 CREDITI$=CREDITI$+"This is the end...Enjoy!"
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[CREDITI$,22,22,1,250]
End Proc
Procedure MOSTRAILBONUS[M0DO]
 ' Show the bonus 
 If M0DO=VERO
  CIFRA=BONUS/1000000 mod 10
  Paste Bob 305,120,73+CIFRA
  CIFRA=BONUS/100000 mod 10
  Paste Bob 305,138,73+CIFRA
  CIFRA=BONUS/10000 mod 10
  Paste Bob 305,156,73+CIFRA
  CIFRA=BONUS/1000 mod 10
  Paste Bob 305,174,73+CIFRA
  CIFRA=BONUS/100 mod 10
  Paste Bob 305,192,73+CIFRA
  CIFRA=BONUS/10 mod 10
  Paste Bob 305,210,73+CIFRA
  CIFRA=BONUS mod 10
  Paste Bob 305,228,73+CIFRA
 Else 
  CIFRA=BONUS mod 10
  Paste Bob 305,228,73+CIFRA
  If CIFRA=9
   CIFRA=BONUS/10 mod 10
   Paste Bob 305,210,73+CIFRA
   If CIFRA=9
    CIFRA=BONUS/100 mod 10
    Paste Bob 305,192,73+CIFRA
    If CIFRA=9
     CIFRA=BONUS/1000 mod 10
     Paste Bob 305,174,73+CIFRA
     If CIFRA=9
      CIFRA=BONUS/10000 mod 10
      Paste Bob 305,156,73+CIFRA
      If CIFRA=9
       CIFRA=BONUS/100000 mod 10
       Paste Bob 305,138,73+CIFRA
       If CIFRA=9
        CIFRA=BONUS/1000000 mod 10
        Paste Bob 305,120,73+CIFRA
       End If 
      End If 
     End If 
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MOSTRAILLASER
 ' Show the laser beam over the bar 
 If LASER>0
  Bob OGGETTOLASER,XBARRA,YBARRA,IMMAGINELASER+LASER
 Else If LASER=0
  Proc T0GLIILLASER
  LASER=-1
 End If 
End Proc
Procedure MOSTRAILLIVELLO
 ' Shov the level 
 CIFRA=LIVELLO/100 mod 10
 Paste Bob 273,29,63+CIFRA
 CIFRA=LIVELLO/10 mod 10
 Paste Bob 289,29,63+CIFRA
 CIFRA=LIVELLO mod 10
 Paste Bob 305,29,63+CIFRA
End Proc
Procedure MOSTRAILPUNTEGGIO[M0DO]
 ' Show the score 
 If M0DO=VERO
  CIFRA=PUNTEGGIO/1000000 mod 10
  Paste Bob 273,120,53+CIFRA
  CIFRA=PUNTEGGIO/100000 mod 10
  Paste Bob 273,138,53+CIFRA
  CIFRA=PUNTEGGIO/10000 mod 10
  Paste Bob 273,156,53+CIFRA
  CIFRA=PUNTEGGIO/1000 mod 10
  Paste Bob 273,174,53+CIFRA
  CIFRA=PUNTEGGIO/100 mod 10
  Paste Bob 273,192,53+CIFRA
  CIFRA=PUNTEGGIO/10 mod 10
  Paste Bob 273,210,53+CIFRA
  CIFRA=PUNTEGGIO mod 10
  Paste Bob 273,228,53+CIFRA
 Else 
  CIFRA=PUNTEGGIO mod 10
  Paste Bob 273,228,53+CIFRA
  If CIFRA=0
   CIFRA=PUNTEGGIO/10 mod 10
   Paste Bob 273,210,53+CIFRA
   If CIFRA=0
    CIFRA=PUNTEGGIO/100 mod 10
    Paste Bob 273,192,53+CIFRA
    If CIFRA=0
     CIFRA=PUNTEGGIO/1000 mod 10
     Paste Bob 273,174,53+CIFRA
     If CIFRA=0
      CIFRA=PUNTEGGIO/10000 mod 10
      Paste Bob 273,156,53+CIFRA
      If CIFRA=0
       CIFRA=PUNTEGGIO/100000 mod 10
       Paste Bob 273,138,53+CIFRA
       If CIFRA=0
        CIFRA=PUNTEGGIO/1000000 mod 10
        Paste Bob 273,120,53+CIFRA
       End If 
      End If 
     End If 
    End If 
   End If 
  End If 
 End If 
 If PUNTEGGIO>PUNTEGGIOMASSIMO
  PUNTEGGIOMASSIMO=PUNTEGGIO
 End If 
 Proc MOSTRAILPUNTEGGIOMASSIMO[M0DO]
 Proc MOSTRALAPOSIZIONE
End Proc
Procedure MOSTRAILPUNTEGGIOMASSIMO[M0DO]
 ' Show the best score
 If M0DO=VERO
  CIFRA=PUNTEGGIOMASSIMO/1000000 mod 10
  Paste Bob 289,120,63+CIFRA
  CIFRA=PUNTEGGIOMASSIMO/100000 mod 10
  Paste Bob 289,138,63+CIFRA
  CIFRA=PUNTEGGIOMASSIMO/10000 mod 10
  Paste Bob 289,156,63+CIFRA
  CIFRA=PUNTEGGIOMASSIMO/1000 mod 10
  Paste Bob 289,174,63+CIFRA
  CIFRA=PUNTEGGIOMASSIMO/100 mod 10
  Paste Bob 289,192,63+CIFRA
  CIFRA=PUNTEGGIOMASSIMO/10 mod 10
  Paste Bob 289,210,63+CIFRA
  CIFRA=PUNTEGGIOMASSIMO mod 10
  Paste Bob 289,228,63+CIFRA
 Else 
  CIFRA=PUNTEGGIOMASSIMO mod 10
  Paste Bob 289,228,63+CIFRA
  If CIFRA=0
   CIFRA=PUNTEGGIOMASSIMO/10 mod 10
   Paste Bob 289,210,63+CIFRA
   If CIFRA=0
    CIFRA=PUNTEGGIOMASSIMO/100 mod 10
    Paste Bob 289,192,63+CIFRA
    If CIFRA=0
     CIFRA=PUNTEGGIOMASSIMO/1000 mod 10
     Paste Bob 289,174,63+CIFRA
     If CIFRA=0
      CIFRA=PUNTEGGIOMASSIMO/10000 mod 10
      Paste Bob 289,156,63+CIFRA
      If CIFRA=0
       CIFRA=PUNTEGGIOMASSIMO/100000 mod 10
       Paste Bob 289,138,63+CIFRA
       If CIFRA=0
        CIFRA=PUNTEGGIOMASSIMO/1000000 mod 10
        Paste Bob 289,120,63+CIFRA
       End If 
      End If 
     End If 
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MOSTRAILRAGGIOLASER
 ' Show the laser ray 
 If RAGGIOLASERSPARATO=VERO
  Bob OGGETTORAGGIOLASER,XLASER,YLASER,IMMAGINERAGGIOLASER
  If RAGGIOLASERRIFLESSO=VERO
   If YLASER<255
    Add YLASER,5
   Else 
    RAGGIOLASERRIFLESSO=FALSO
    Proc CANCELLAILRAGGIOLASER
   End If 
  Else 
   If YLASER>0
    Add YLASER,-5
   Else 
    Proc CANCELLAILRAGGIOLASER
   End If 
  End If 
  Bob Update 
 End If 
End Proc
Procedure MOSTRAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
 ' Show the top hundred player scores 
 If Exist(PUNTEGGI$) and CENTOGIOCATORI$<>""
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[CENTOGIOCATORI$,20,22,1,250]
 Else 
  NONCISONOGIOCATORI$="No players till now..."+Chr$(10)
  NONCISONOGIOCATORI$=NONCISONOGIOCATORI$+"Press a (mouse) key to continue"
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[NONCISONOGIOCATORI$,21,20,1,250]
 End If 
End Proc
Procedure MOSTRALABARRA
 ' Show the bar 
 If LUNGHEZZADELLABARRA=0
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,5
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,6
 Else If LUNGHEZZADELLABARRA=1
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,1
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,2
 Else If LUNGHEZZADELLABARRA=2
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,3
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,4
 End If 
End Proc
Procedure MOSTRALAPOSIZIONE
 ' Show the current player position 
 For POSIZIONE=1 To 100
  If PUNTEGGIO>Val(PUNTEGGIODELGIOCATORE$(POSIZIONE-1))
   Exit 
  Else If PUNTEGGIODELGIOCATORE$(POSIZIONE-1)=""
   Exit 
  End If 
 Next POSIZIONE
 CIFRA=POSIZIONE/100 mod 10
 Paste Bob 273,47,73+CIFRA
 CIFRA=POSIZIONE/10 mod 10
 Paste Bob 289,47,73+CIFRA
 CIFRA=POSIZIONE mod 10
 Paste Bob 305,47,73+CIFRA
End Proc
Procedure MOSTRALARIGA[TIPODIRIGA]
 ' Show the row 
 If TIPODIRIGA=1
  IMMAGINERIGA=IMMAGINERIGAUNO
 Else If TIPODIRIGA=2
  IMMAGINERIGA=IMMAGINERIGADUE
 Else If TIPODIRIGA=3
  IMMAGINERIGA=IMMAGINERIGATRE
 End If 
 If XRIGA>0
  Bob OGGETTORIGA,XRIGA,251,IMMAGINERIGA
 Else 
  If T0GLILARIGA>0
   Proc T0GLILARIGA
   T0GLILARIGA=0
   DURATADELLARIGA=-1
  End If 
 End If 
 Bob Update 
End Proc
Procedure MOSTRALEPALLINERIMASTE
 ' Show the remained balls
 PALLINERIMASTE=PALLINE-1
 If PALLINERIMASTE>-1
  CIFRA=PALLINERIMASTE/100 mod 10
  Paste Bob 273,11,53+CIFRA
  CIFRA=PALLINERIMASTE/10 mod 10
  Paste Bob 289,11,53+CIFRA
  CIFRA=PALLINERIMASTE mod 10
  Paste Bob 305,11,53+CIFRA
 End If 
End Proc
Procedure _PAPEROALIENOINCAMPO
 ' Manage the alien duck
 If _PAPEROALIENO=0
  XPAPEROALIENO=Rnd(XFINALERIGA) : YPAPEROALIENO=-20
  GRADIPAPEROALIENO=45 : _PAPEROALIENO=1
 Else 
  If RITARDOPAPERO=0
   Add IMMAGINEPAPEROALIENO,1,0 To IMMAGINIPAPERO-1
   Inc YPAPEROALIENO
  End If 
  If _PAPEROINCAMPO=FALSO
   Add RITARDOPAPERO,1,0 To 12
  End If 
  Add GRADIPAPEROALIENO,_PAPEROALIENO
  If GRADIPAPEROALIENO=90
   GUANOINCAMPO=VERO
  Else If _PAPEROALIENO=1 and GRADIPAPEROALIENO=135
   _PAPEROALIENO=-1
  Else If _PAPEROALIENO=-1 and GRADIPAPEROALIENO=45
   _PAPEROALIENO=1
  End If 
  XMOVIMENTOPAPEROALIENO=Cos(GRADIPAPEROALIENO)*80
  YMOVIMENTOPAPEROALIENO=Sin(GRADIPAPEROALIENO)*80-50
  Bob OGGETTOPAPEROALIENO,XPAPEROALIENO+XMOVIMENTOPAPEROALIENO,YPAPEROALIENO+YMOVIMENTOPAPEROALIENO,IMMAGINEPAPEROALIENO(IMMAGINEPAPEROALIENO)
  Proc ILPAPEROALIENOESTATOCOLPITO
  Proc ILPAPEROALIENOEUSCITODALCAMPODIGIOCO
 End If 
End Proc
Procedure _PAPEROINCAMPO
 ' Manage the duck
 Bob OGGETTOPAPERO,XPAPERO,YPAPERO,IMMAGINEPAPERO(IMMAGINEPAPERO)
 If RITARDOPAPERO=0
  Add IMMAGINEPAPERO,1,0 To IMMAGINIPAPERO-1
 End If 
 Add RITARDOPAPERO,1,0 To 12
 If MATTONCINODATROVAREPERILPAPERO<247
  If MATTONCINO(MATTONCINODATROVAREPERILPAPERO)>0
   XMATTONCINOPERILPAPERO=X0ZONA(MATTONCINODATROVAREPERILPAPERO)-XPAPERO
   YMATTONCINOPERILPAPERO=Y0ZONA(MATTONCINODATROVAREPERILPAPERO)-YPAPERO
   If Abs(XMATTONCINOPERILPAPERO)+Abs(YMATTONCINOPERILPAPERO)<DISTANZADELMATTONCINOPIUVICINOALPAPERO
    DISTANZADELMATTONCINOPIUVICINOALPAPERO=Abs(XMATTONCINOPERILPAPERO)+Abs(YMATTONCINOPERILPAPERO)
    MATTONCINOPERILPAPERO=MATTONCINODATROVAREPERILPAPERO
   End If 
  End If 
  Add MATTONCINODATROVAREPERILPAPERO,1,0 To 247
 Else 
  DISTANZADELMATTONCINOPIUVICINOALPAPERO=1000
  XDISTANZADELPAPERODALMATTONCINOPIUVICINO=X0ZONA(MATTONCINOPERILPAPERO)+10-XPAPERO
  If XDISTANZADELPAPERODALMATTONCINOPIUVICINO>0
   Inc XPAPERO
  Else If XDISTANZADELPAPERODALMATTONCINOPIUVICINO<0
   Dec XPAPERO
  End If 
  YDISTANZADELPAPERODALMATTONCINOPIUVICINO=Y0ZONA(MATTONCINOPERILPAPERO)+5-YPAPERO
  If YDISTANZADELPAPERODALMATTONCINOPIUVICINO>0
   Inc YPAPERO
  Else If YDISTANZADELPAPERODALMATTONCINOPIUVICINO<0
   Dec YPAPERO
  End If 
  If XDISTANZADELPAPERODALMATTONCINOPIUVICINO=0 and YDISTANZADELPAPERODALMATTONCINOPIUVICINO=0
   If MATTONCINO(MATTONCINOPERILPAPERO)>0
    X0MATTONCINO=X0ZONA(MATTONCINOPERILPAPERO)
    Y0MATTONCINO=Y0ZONA(MATTONCINOPERILPAPERO)
    X1MATTONCINO=X0MATTONCINO+19
    Y1MATTONCINO=Y0MATTONCINO+9
    Proc CANCELLAILPAPERO
    Ink 0 : Bar X0MATTONCINO,Y0MATTONCINO To X1MATTONCINO,Y1MATTONCINO
    Dec MATTONCINI : Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
    Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINOPERILPAPERO,Rnd(9)]
    MATTONCINO(MATTONCINOPERILPAPERO)=0
   Else 
    MATTONCINODATROVAREPERILPAPERO=0
   End If 
  End If 
 End If 
End Proc
Procedure RIDISEGNODELMATTONCINO[MATTONCINO,DURATADELRIDISEGNODELMATTONCINO]
 ' Redraw the hitted bricks 
 For MATTONCINODARIDISEGNARE=0 To MASSIMOMATTONCINIDARIDISEGNARE-1
  If MATTONCINODARIDISEGNARE(MATTONCINODARIDISEGNARE)=MATTONCINO
   MATTONCINODARIDISEGNARE(MATTONCINODARIDISEGNARE)=MATTONCINO
   DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)=DURATADELRIDISEGNODELMATTONCINO
  Else If DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)=0
   MATTONCINODARIDISEGNARE(MATTONCINODARIDISEGNARE)=MATTONCINO
   DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)=DURATADELRIDISEGNODELMATTONCINO
   Pop Proc
  End If 
 Next MATTONCINODARIDISEGNARE
End Proc
Procedure RIMETTILOSFONDO
 ' Redraw the screen
 Put Block 1
End Proc
Procedure RUBAPALLINAINCAMPO
 If PALLINASCELTADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
  PALLINA=Rnd(MASSIMOPALLINEINCAMPO-1)
  If PALLINA(PALLINA)=VERO
   PALLINASCELTADALRUBAPALLINA=PALLINA
   YRUBAPALLINA=0
   If SUONICARICATI=VERO
    Sam Play 13 : Proc VOCESEGUENTE
   Else 
    Bell 4
   End If 
  End If 
 Else 
  Bob OGGETTORUBAPALLINA,XRUBAPALLINA,YRUBAPALLINA,IMMAGINERUBAPALLINA(IMMAGINERUBAPALLINA)
  If PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
   If PALLINA(PALLINASCELTADALRUBAPALLINA)=VERO
    XPALLINA=Int(XPALLINA#(PALLINASCELTADALRUBAPALLINA))
    YPALLINA=Int(YPALLINA#(PALLINASCELTADALRUBAPALLINA))
    XRUBAPALLINA=XPALLINA
    If YRUBAPALLINA>YPALLINA
     Dec YRUBAPALLINA
    Else If YRUBAPALLINA<YPALLINA
     Inc YRUBAPALLINA
    Else 
     PALLINAPRESADALRUBAPALLINA=PALLINASCELTADALRUBAPALLINA
     PALLINA(PALLINAPRESADALRUBAPALLINA)=FALSO
    End If 
   Else 
    PALLINASCELTADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
    PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
   End If 
  Else 
   Bob OGGETTOPALLINA+PALLINAPRESADALRUBAPALLINA,XRUBAPALLINA,YRUBAPALLINA,IMMAGINEPALLINA
   Add XRUBAPALLINA,Rnd(6)-3
   Proc LIMITI[XRUBAPALLINA,11,XFINALERIGA-11] : XRUBAPALLINA=Param
   Dec YRUBAPALLINA
   If RITARDODELLARIPETIZIONEDELSUONODELLAPALLINARUBATA=0
    If SUONICARICATI=VERO
     Sam Play 14 : Proc VOCESEGUENTE
    Else 
     Bell 4
    End If 
   End If 
   Add RITARDODELLARIPETIZIONEDELSUONODELLAPALLINARUBATA,1,0 To 49
   Proc ILRUBAPALLINAEUSCITODALCAMPODIGIOCO
  End If 
  Proc ILRUBAPALLINAESTATOCOLPITO
 End If 
End Proc
Procedure SALVAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
 ' Save the top hundred scores
 If Exist(PUNTEGGI$) Then Kill PUNTEGGI$
 Open Out 1,PUNTEGGI$
 For POSIZIONI=0 To 99
  If Val(PUNTEGGIODELGIOCATORE$(POSIZIONI))>0
   Print #1,NOMEDELGIOCATORE$(POSIZIONI)
   Print #1,PUNTEGGIODELGIOCATORE$(POSIZIONI)
   Print #1,LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONI)
  End If 
 Next POSIZIONI
 Close 1
End Proc
Procedure TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTO$,C0LORETESTOPRIMALINEA,C0LORETESTOSECONDALINEA,C0LOREBORDO,TEMP0]
 ' Manage the texts 
 If TESTO$="" Then Get Block 1,0,0,Screen Width,Screen Height
 ALTEZZALINEA=ALTEZZAFONT+3
 LINEE=1
 POSIZIONEPAROLA=1
 Repeat 
  ACAPO=Instr(TESTO$,Chr$(10),POSIZIONEPAROLA)
  If ACAPO>0 Then Inc LINEE : POSIZIONEPAROLA=ACAPO+1
 Until ACAPO=0
 If LINEE=1
  C0LORETESTO=C0LORETESTOPRIMALINEA
  XINIZIOTESTO=(Screen Width-Text Length(TESTO$))/2
  YINIZIOTESTO=(Screen Height-(ALTEZZALINEA))/2+Text Base
  Proc RIMETTILOSFONDO
  Proc CREATESTOBORDATO[XINIZIOTESTO,YINIZIOTESTO,TESTO$,C0LORETESTO,C0LOREBORDO]
  Proc _ASPETTA[TEMP0]
  If TASTO=27
   Pop Proc
  End If 
 Else 
  Dim TESTO$(LINEE-1)
  POSIZIONEPAROLA=1
  For LINEA=0 To LINEE-1
   ACAPO=Instr(TESTO$,Chr$(10),POSIZIONEPAROLA)
   If ACAPO>0
    TESTO$(LINEA)=Mid$(TESTO$,POSIZIONEPAROLA,ACAPO-POSIZIONEPAROLA)
    POSIZIONEPAROLA=ACAPO+1
   Else 
    TESTO$(LINEA)=Right$(TESTO$,Len(TESTO$)-POSIZIONEPAROLA+1)
   End If 
  Next LINEA
  ALTEZZATESTO=ALTEZZALINEA*LINEE
  If ALTEZZATESTO<Screen Height
   ILTESTOSTATUTTONELLOSCHERMO=VERO
  Else 
   For LINEA=LINEE To 2 Step -1
    ALTEZZATESTO=ALTEZZALINEA*LINEA
    If ALTEZZATESTO<Screen Height
     NUMEROMASSIMODILINEENELLOSCHERMO=LINEA
     Exit 
    End If 
   Next LINEA
  End If 
  If ILTESTOSTATUTTONELLOSCHERMO=VERO
   Proc RIMETTILOSFONDO
   YINIZIOTESTO=(Screen Height-ALTEZZATESTO)/2+Text Base
   For LINEA=0 To LINEE-1
    If LINEA mod 2=0
     C0LORETESTO=C0LORETESTOPRIMALINEA
    Else 
     C0LORETESTO=C0LORETESTOSECONDALINEA
    End If 
    XINIZIOTESTO=(Screen Width-Text Length(TESTO$(LINEA)))/2
    Proc CREATESTOBORDATO[XINIZIOTESTO,YINIZIOTESTO+ALTEZZALINEA*LINEA,TESTO$(LINEA),C0LORETESTO,C0LOREBORDO]
   Next LINEA
   Proc _ASPETTA[TEMP0]
   If TASTO=27
    Pop Proc
   End If 
  Else 
   Proc RIMETTILOSFONDO
   YINIZIOTESTO=(Screen Height-ALTEZZATESTO)/2+Text Base
   For LINEA=0 To NUMEROMASSIMODILINEENELLOSCHERMO-1
    If(LINEA) mod 2=0
     C0LORETESTO=C0LORETESTOPRIMALINEA
    Else 
     C0LORETESTO=C0LORETESTOSECONDALINEA
    End If 
    XINIZIOTESTO=(Screen Width-Text Length(TESTO$(LINEA)))/2
    Proc CREATESTOBORDATO[XINIZIOTESTO,YINIZIOTESTO+ALTEZZALINEA*LINEA,TESTO$(LINEA),C0LORETESTO,C0LOREBORDO]
   Next LINEA
   Proc _ASPETTA[TEMP0*NUMEROMASSIMODILINEENELLOSCHERMO]
   If TASTO=27
    Pop Proc
   End If 
   For LINEA=1 To LINEE-NUMEROMASSIMODILINEENELLOSCHERMO
    Proc RIMETTILOSFONDO
    For LINEANELLOSCHERMO=0 To NUMEROMASSIMODILINEENELLOSCHERMO-1
     If(LINEA+LINEANELLOSCHERMO) mod 2=0
      C0LORETESTO=C0LORETESTOPRIMALINEA
     Else 
      C0LORETESTO=C0LORETESTOSECONDALINEA
     End If 
     XINIZIOTESTO=(Screen Width-Text Length(TESTO$(LINEANELLOSCHERMO+LINEA)))/2
     Proc CREATESTOBORDATO[XINIZIOTESTO,YINIZIOTESTO+ALTEZZALINEA*LINEANELLOSCHERMO,TESTO$(LINEANELLOSCHERMO+LINEA),C0LORETESTO,C0LOREBORDO]
    Next LINEANELLOSCHERMO
    Proc _ASPETTA[TEMP0]
    If TASTO=27
     Pop Proc
    End If 
   Next LINEA
  End If 
 End If 
End Proc
Procedure T0GLILARCOBALENO
 ' Fade out the rainbow 
 For LINEADELLARCOBALENO=271 To 271-255 Step -1
  Rainbow 0,257,0,LINEADELLARCOBALENO
  Wait Vbl 
 Next LINEADELLARCOBALENO
End Proc
Procedure T0GLILARIGA
 ' Turn off the row 
 Bob Off OGGETTORIGA
 Bob Update 
End Proc
Procedure T0GLIILLASER
 ' Turn off the laser beam
 Bob Off OGGETTOLASER
 Bob Update 
End Proc
Procedure T0GLIILPANNELLO
 ' Fade out the panel 
 Ink 0
 For LINEAPANNELLO=255 To 0 Step -1
  Draw XPANNELLO,LINEAPANNELLO To XPANNELLO+LARGHEZZAPANNELLO-1,LINEAPANNELLO
  Wait Vbl 
 Next LINEAPANNELLO
End Proc
Procedure T0GLIIMATTONCINI
 ' Fade out the bricks
 Ink 0
 For MATTONCINO=246 To 0 Step -1
  If MATTONCINO(MATTONCINO)>0
   Bar X0ZONA(MATTONCINO),Y0ZONA(MATTONCINO) To X0ZONA(MATTONCINO)+19,Y0ZONA(MATTONCINO)+9
   Wait Vbl 
  End If 
 Next MATTONCINO
End Proc
Procedure TROVAILFONTDATA70
 ' Look for the Data70 font 
 TESTOFONTEDICARATTERE$="I am looking for the Data70 font..."+Chr$(10)
 TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"...in your FONTS: drawer."+Chr$(10)
 TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"Wait for a moment, please..."
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOFONTEDICARATTERE$,17,17,19,-1]
 Get Disc Fonts 
 For FONTEDICARATTERE=1 To 65535
  FONTEDICARATTERE$=Left$(Font$(FONTEDICARATTERE),30)-" "
  If FONTEDICARATTERE$="Data70.font" Then Exit 
 Next FONTEDICARATTERE
 If FONTEDICARATTERE<65536
  Set Font FONTEDICARATTERE
  ALTEZZAFONT=Val(Mid$(Font$(FONTEDICARATTERE),31,2)-" ")
  TESTOFONTEDICARATTERE$="The font I am using is the Data70 font! :)"+Chr$(10)
  TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"This font will be used for the game."+Chr$(10)
  TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOFONTEDICARATTERE$,17,17,19,250]
 Else 
  TESTOFONTEDICARATTERE$="The font I am using is the Topaz font! :("+Chr$(10)
  TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"This font will be used for the game."+Chr$(10)
  TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOFONTEDICARATTERE$,18,18,19,250]
 End If 
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
End Proc
Procedure VOCESEGUENTE
 ' Select the next audio voice for the next sound 
 Add VOCE,VOCE : If VOCE=16 Then VOCE=1
End Proc
